0

我正在编写一个 Android GMail 客户端应用程序。

当它创建一条消息时,我向它添加一个标题,如下所示:

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);

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

当我打电话

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]);
}
4

1 回答 1

0

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

另外,尝试使用(例如)写出整个消息

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

并查看标题是否存在。如果是,并且协议跟踪显示它没有为 getHeader 调用返回,那么它是服务器中的一个错误。在这种情况下,请参阅JavaMail FAQ 条目以了解如何解决此类服务器错误

于 2011-11-30T20:26:22.940 回答