【问题标题】:Unable to get message_ID for MimeMessage无法获取 MimeMessage 的 message_ID
【发布时间】:2014-01-18 04:13:46
【问题描述】:

我有一个使用Java Mail-1.5 的Java 程序,它获取和处理Gmail(IMAP) 的消息(电子邮件)。 它在大多数情况下都可以正常工作,但是当我尝试使用 MimeMessage 获取 message_id 时,对于少数消息,它给了我 NULL。在这种情况下,我无法处理消息,因为 messageID 对于消息是唯一的。

String messageID = ((MimeMessage) msg​​).getMessageID(); //少数消息为NULL。

有没有其他方法可以获取消息 ID,因为我不想忽略此类消息。

【问题讨论】:

    标签: java jakarta-mail imap


    【解决方案1】:

    使用它来强制 JavaMail API 刷新内容的标题。

    ((MimeMessage) msg).saveChanges();
    

    它应该填充 Message-ID 标头值。下面的例子是一种随意生成消息ID的简单方法:

    MimeMessage mimemessage 
                =new MimeMessage(Session.getDefaultInstance( new Properties()));
    mimemessage.saveChanges();
    String messageID = mmo.getMessageID();
    

    【讨论】:

      【解决方案2】:

      消息不需要有 Message-Id 标头。大多数消息都是这样。而且在很多情况下,如果服务器接收到没有 Message-Id 标头的消息,它会添加一个。不过,没有任何保证。如果您依赖 Message-Id 来唯一标识一条消息,那么您需要有一种备用技术来应对消息没有 Message-Id 的情况。

      【讨论】:

        【解决方案3】:
        String messageID = ((MimeMessage) msg).getMessageID();
        

        如果此字段不可用或其值为不存在,则返回null

        如果是null,您可以创建自己的消息ID

        StringBuffer s = new StringBuffer();
        if(messageId == null)
        messageId =  s.append(s.hashCode()).append('.').append(getUniqueId()).append('.').
        append(System.currentTimeMillis()).append('.').
        append("JavaMail");
        

        这是在发送邮件时创建和设置消息 ID 的方式。您可以根据自己的要求进行自己的实施,然后继续处理您的消息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-20
          • 2021-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          相关资源
          最近更新 更多