2011-11-30 37 views
0

我正在编写Android GMail客户端应用程序。JavaMail消息getHeader()bug

当它创建了一个消息,我一个头添加到它:

MimeMessage msg = new MimeMessage(session); 
msg.setFrom(new InternetAddress(username)); 
msg.setSubject(subject); 
msg.setText(message); 
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); 

long time = someTime; 
msg.addHeader("My_Header", Long.toString(time)); 

//IMAPFolder f declaration & initialization 

    f.open(Folder.READ_WRITE); 
f.addMessages(new Message[]{msg}); 
f.close(true); 

这一切工作正常,我能够看到正确添加到邮件的标题上观看我的Gmail帐户时,我PC。但是,当我稍后尝试检索标题信息时,它变得非常奇怪。

当我打电话

String[] str = msg.getHeader("My_Header"); 

getHeader()回报null我是否正在运行的应用程序。但是,当我调试应用程序并在getHeader()调用之前设置断点时,它会正确返回标头值。

我的源代码:

MimeMessage msg = getNextMessage(); 
String subject = msg.getSubject(); 
InternetAddresses to[] = msg.getAllRecipients() 

String when[] = msg.getHeader(GMailClient.TIME_TO_SEND);   
if (when == null) { 
      Log.i(TAG, "Null Header"); 
} else { 
    long time = Long.parseLong(when[0]); 
      Log.i(TAG, "Value retrieved: " + when[0]); 
} 

回答

0

可能Gmail没有正确地通过IMAP返回头信息?您可能希望查看协议跟踪以准确查看服务器为您的请求返回的内容。

另外,尝试使用(例如)

msg.writeTo(new FileOutputStream("msg.txt")); 

,看看是否标题是有写出整个消息。如果是这样,并且协议跟踪显示它没有为getHeader调用返回,则它是服务器中的一个错误。在这种情况下,请参阅JavaMail FAQ entry for how to work around such server bugs

相关问题