尝试打印邮件时出现NullPointerException

时间:2014-10-10 14:24:56

标签: java nullpointerexception javamail

我有一个程序使用javamail从使用imap协议的交换服务器检索消息,然后我处理每个看不见的消息。

最近我遇到了程序抛出nullpointerexception的问题,我知道这对于调用方法的单元化对象有用,但在这种情况下它对我没有任何意义。

异常的堆栈跟踪如下:

java.lang.NullPointerException
at com.sun.mail.imap.IMAPFolder.handleResponse(IMAPFolder.java:1905)
at com.sun.mail.iap.Protocol.notifyResponseHandlers(Protocol.java:135
at com.sun.mail.imap.protocol.IMAPProtocol.fetchBodyStructure(IMAPProtocol.java:617)
at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1027)
at com.sun.mail.imap.IMAPMessage.getContentType(IMAPMessage.java:321)
at javax.mail.internet.MimeBodyPart.isMimeType(MimeBodyPart.java:802)
at javax.mail.internet.MimeMessage.isMimeType(MimeMessage.java:851)
at ctt.mail.FileHandler.putFilesFromMail(FileHandler.java:75)
at ctt.mail.FileHandler.main(FileHandler.java:37)

aditionaly我已经从上次处理的消息中获得了调试跟踪     A607 FETCH 202(标记)

* 202 FETCH (FLAGS (\Seen))

A607 OK FETCH completed.

A608 FETCH 202 (ENVELOPE INTERNALDATE RFC822.SIZE)

* 202 FETCH (ENVELOPE ("Mon, 14 Jul 2014 15:33:56 +0100" "=?iso-8859-1?Q?GPESE_-_    Pr=E9=5FAviso_de_Expedi=E7=E3o?=" (("SRS0+83ffd8147b51e356=4J=solicitador.net=gpese@solicitador.net" NIL "SRS0+83ffd8147b51e356=4J=solicitador.net=gpese" "solicitador.net")) NIL NIL (("=?iso-8859-1?Q?RECE=C7=C3O_FICHEIROS_CTT_WINREG?=" NIL "cttwinreg" "ctt.pt")) (("caraujo@caso.pt" NIL "caraujo" "caso.pt")) NIL NIL "<1890939061.7011405348433043.JavaMail.gpese@solicitador.net>") INTERNALDATE "14-Jul-2014 15:33:58 +0100" RFC822.SIZE 6462)

A608 OK FETCH completed.

A609 FETCH 202 (BODYSTRUCTURE)

* 202 FETCH (BODYSTRUCTURE (("text" "plain" ("charset" "iso-8859-1") NIL NIL "quoted-printable" 0 0 NIL NIL NIL NIL)("text" "xml" ("name" "GPESE - GE_369515.xml") NIL "GPESE - GE_369515.xml" "base64" 5202 67 NIL ("attachment" ("filename" "GPESE - GE_369515.xml" "size" "3865" "creation-date" "Mon, 14 Jul 2014 14:33:58 GMT" "modification-date" "Mon, 14 Jul 2014 14:33:58 GMT")) NIL NIL) "mixed" ("boundary" "_002_18909390617011405348433043JavaMailgpesesolicitadornet_") NIL "pt-PT"))

* 24457 FETCH (FLAGS (\Seen))

* 24458 FETCH (FLAGS (\Seen))

* 24459 FETCH (FLAGS (\Seen))

* 24460 FETCH (FLAGS (\Seen \Recent))

* 24461 FETCH (FLAGS (\Seen \Recent))

* 24462 FETCH (FLAGS (\Seen \Recent))

A609 OK FETCH completed.

抛出异常的行在这种情况下是一个调试行:

System.out.println("Mensagem n.º " + i + " de " + (new InternetAddress()).toString(message[i].getFrom()) + " com o assunto " + message[i].getSubject() + " recebida em " + (new SimpleDateFormat("dd/MM/yyyy HH:mm:ss")).format(message[i].getReceivedDate()) + ". Nova? " + msgFlags.contains(javax.mail.Flags.Flag.RECENT) + ". Tem attachments mixed? " + message[i].isMimeType("multipart/mixed") + ". Tem attachments alternative? " + message[i].isMimeType("multipart/alternative") + ". Tem attachments alternative? " + message[i].isMimeType("") + ". O mime type \351? " + message[i].getContentType());

因此,在这种情况下的问题是在消息[i] .isMimeType()之一;但根据我的经验,异常可以从另一个方法抛出,例如message [i] .getFlags()。

我已经测试了消息[i]为null并且它不为空,这就是为什么我不明白为什么抛出异常。

任何帮助将不胜感激。 感谢。

编辑: 我收集的一些额外的堆栈跟踪异常

java.lang.NullPointerException
at com.sun.mail.imap.IMAPFolder.handleResponse(IMAPFolder.java:1905)
at com.sun.mail.iap.Protocol.notifyResponseHandlers(Protocol.java:135)
at com.sun.mail.imap.protocol.IMAPProtocol.fetchFlags(IMAPProtocol.java:745)
at com.sun.mail.imap.IMAPMessage.loadFlags(IMAPMessage.java:1093)
at com.sun.mail.imap.IMAPMessage.getFlags(IMAPMessage.java:704)
at ctt.mail.FileHandler.putFilesFromMail(FileHandler.java:58)


java.lang.NullPointerException
at com.sun.mail.imap.IMAPFolder.handleResponse(IMAPFolder.java:1905)
at com.sun.mail.imap.IMAPFolder.handleResponses(IMAPFolder.java:1926)
at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:985)
at com.sun.mail.imap.IMAPMessage.getReceivedDate(IMAPMessage.java:278)
at ctt.mail.FileHandler.putFilesFromMail(FileHandler.java:63)

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的JavaMail?看起来在JavaMail IMAP提供程序中发生NullPointerException。从堆栈跟踪看起来这可能是JavaMail的一个非常旧的版本。