我正在撰写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]);
}
答案 0 :(得分:0)
可能Gmail没有通过IMAP正确返回标题信息?您可能希望查看协议跟踪,以确切了解服务器为您的请求返回的内容。
另外,尝试使用(例如)
写出整个信息msg.writeTo(new FileOutputStream("msg.txt"));
并查看标题是否存在。如果是,并且协议跟踪显示它没有被返回用于getHeader调用,则它是服务器中的错误。在这种情况下,请参阅JavaMail FAQ entry for how to work around such server bugs。