Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用SpringJavaMail发送电子邮件之前检索生成的消息ID_Java_Spring_Smtp_Jakarta Mail - Fatal编程技术网

在使用SpringJavaMail发送电子邮件之前检索生成的消息ID

在使用SpringJavaMail发送电子邮件之前检索生成的消息ID,java,spring,smtp,jakarta-mail,Java,Spring,Smtp,Jakarta Mail,我正在使用org.springframework.mail.javamail.javamailssender使用SMTP发送电子邮件,因此我需要检索邮件ID头。下面的代码 message.getMimeMessage().getMessageID() 正在返回null。如何检索消息ID public void notifyByMail(final NotificationRequest request) { MimeMessagePreparator preparator = ne

我正在使用
org.springframework.mail.javamail.javamailssender
使用SMTP发送电子邮件,因此我需要检索邮件ID头。下面的代码

message.getMimeMessage().getMessageID()  
正在返回null。如何检索消息ID

public void notifyByMail(final NotificationRequest request)
{
    MimeMessagePreparator preparator = new MimeMessagePreparator()
    {
        public void prepare(MimeMessage mimeMessage) throws Exception
        {
            MimeMessageHelper message = null;
            message = new MimeMessageHelper(mimeMessage, UTF_8);
            message.setTo(request.getTo());
            message.setCc(request.getCc());
            message.setFrom(request.getFrom());
            message.setReplyTo(request.getReplyTo());
            message.setSubject(request.getSubject());
            message.setText("some text", true);

            //Need to retrieve the Message-ID here
            System.out.println("Message - ID : " + message.getMimeMessage().getMessageID());
        }

    };
    getMailSender().send(preparator);
}

在发送消息之前,不会设置消息ID

如果要设置自定义消息,我相信您需要覆盖mimessage,如下所示:

public class MyMimeMessage extends MimeMessage {
   private String messageID;

   public MyMimeMessage(Session session, String messageID) {
      super(session);
      this.messageID = messageID;
   }

   @Override
   protected void updateMessageID() throws MessagingException {
      setHeader("Message-ID", messageID);
   }  
}

此外,一些电子邮件服务(如gmail)要求messageID符合特定语法(几乎像电子邮件地址),您可以查看该语法,然后在
message.getMimeMessage().saveChanges()之前尝试
message.getMimeMessage().getMessageID()

创建消息时,您还需要:

        MimeMessage msg = new MimeMessage(session) {
            protected void updateMessageID() throws MessagingException {
                if (getHeader("Message-ID") == null)
                    super.updateMessageID();
            }
        };

这会导致邮件ID标头仅在尚未设置的情况下第一次设置。

您始终可以生成自己的
X-Message-ID
,并将其作为标头添加到邮件中。是否有人验证此方法是否有效?我在saveChanges之后收到一个消息ID,在消息实际发送时收到另一个消息ID。可能Spring在您执行上述操作之后,在消息实际发送之前修改了消息?你可以跳过Spring直接使用JavaMail,我实际上使用的是纯JavaMail。生成的ID的格式为:…JavaMail.@。序列号在我得到的数字和我在目的地的电子邮件客户端中看到的数字之间增加1。以毫秒为单位的时间戳要么完全相同,要么被1关闭。感谢更新!这确实阻止了JavaMail将新的消息ID重新分配给电子邮件。您好,您如何实例化这个
mymimessage
?我使用的是类似于
m_javamailssender.createMimeMessage()
。我想知道如何才能获得定制MimeMessage的会话。谢谢另外,我认为接受消息ID需要遵循一种特定的格式