我有一个使用Java Mail-1.
5的java程序来获取和处理Gmail(IMAP)的消息(电子邮件)。
它适用于大多数情况,但是当我尝试使用MimeMessage获取message_id时,对于很少的消息,它给了我NULL。在这种情况下,我无法处理消息,因为messageID对于消息是唯一的。
String messageID =((MimeMessage)msg).getMessageID(); //对于少数消息为NULL。
是否有其他方法可以获取消息ID,因为我不想忽略此类消息。
答案 0 :(得分:1)
String messageID = ((MimeMessage) msg).getMessageID();
如果此字段不可用或其值不存在,则返回null
。
如果是null
StringBuffer s = new StringBuffer();
if(messageId == null)
messageId = s.append(s.hashCode()).append('.').append(getUniqueId()).append('.').
append(System.currentTimeMillis()).append('.').
append("JavaMail");
这是在发送邮件时创建和设置邮件ID的方式。您可以根据自己的要求使用自己的实现,然后继续处理您的消息
答案 1 :(得分:1)
消息不需要具有Message-Id标头。大多数消息都有。在许多情况下,如果服务器收到没有Message-Id标头的消息,它将添加一个消息。但仍然没有保证。如果您依赖Message-Id来唯一标识消息,则需要使用回退技术来处理消息没有Message-Id的情况。
答案 2 :(得分:1)
使用此命令强制JavaMail API刷新内容中的标题。
((MimeMessage) msg).saveChanges();
它应该填充Message-ID标头值。以下示例是一种随意生成消息ID的简单方法:
MimeMessage mimemessage
=new MimeMessage(Session.getDefaultInstance( new Properties()));
mimemessage.saveChanges();
String messageID = mmo.getMessageID();