Re: Folder.copyMessages

Chris Burdess <[email protected]> Thu, 31 May 2007 11:26:08 +0100
Newsgroups gmane.comp.java.classpath.extensions.javamail
Message-ID <[email protected]>
remi__ wrote:
> I am writing some code to move a mail from a folder to another. The  
> idea is
> to copy it to another folder and then delete the orignal.
>
> Is that normal that this code:
>
> private void moveMail(Message message){
> 	try {
> 		Folder dossierSrc = message.getFolder();
> 		Store store = dossierSrc.getStore();
> 		Folder dossierDest = store.getFolder("processedMails");
> 		if (dossierDest != null && dossierDest.exists()) {
> 			dossierSrc.copyMessages(new Message[]{message}, dossierDest);
> 			message.setFlag(Flags.Flag.DELETED,true);
> 		}
> 	} catch (MessagingException e) {
> 			e.printStackTrace();
> 	}
> }
>
> leads to a NPE:
>
> java.lang.NullPointerException
> 	at
> gnu.mail.providers.imap.IMAPMultipartDataSource.getInputStream 
> (IMAPMultipartDataSource.java:102)
> 	at javax.activation.DataHandler.writeTo(DataHandler.java:215)
> 	at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1618)
> 	at gnu.mail.providers.imap.IMAPMessage.writeTo(IMAPMessage.java:859)
> 	at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1553)
> 	at gnu.mail.providers.imap.IMAPMessage.writeTo(IMAPMessage.java:845)
> 	at gnu.mail.providers.imap.IMAPFolder.appendMessages 
> (IMAPFolder.java:712)
> 	at javax.mail.Folder.copyMessages(Folder.java:669)
> 	at TestDeplacementMailGNU112.moveMail 
> (TestDeplacementMailGNU112.java:63)
> 	at TestDeplacementMailGNU112.test(TestDeplacementMailGNU112.java:47)
> 	at TestDeplacementMailGNU112.main(TestDeplacementMailGNU112.java:31)
>
>
> Whereas that piece of code works fine:
>
> private void moveMail(Message message){
> 	try {
> 		Folder dossierSrc = message.getFolder();
> 		Store store = dossierSrc.getStore();
> 		Folder dossierDest = store.getFolder("processedMails");
> 		if (dossierDest != null && dossierDest.exists()) {
> 			dossierDest.appendMessages(new Message[]{message});
> 			message.setFlag(Flags.Flag.DELETED,true);
> 		}
> 	} catch (MessagingException e) {
> 			e.printStackTrace();
> 	}
> }

That sounds very strange, because copyMessages simply calls  
appendMessages internally.

Could you try with CVS HEAD? I've added a null pointer check at a  
critical point.