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.