在使用Spring JavaMail发送电子邮件之前检索生成的Message-ID

Mah*_*ran 10 java spring smtp jakarta-mail

我正在使用org.springframework.mail.javamail.JavaMailSenderSMTP发送电子邮件,我需要检索Message-ID标头.以下代码

message.getMimeMessage().getMessageID()  
Run Code Online (Sandbox Code Playgroud)

返回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);
}
Run Code Online (Sandbox Code Playgroud)

Bil*_*non 14

尝试message.getMimeMessage().saveChanges()之前message.getMimeMessage().getMessageID().

创建消息时也需要这样:

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

这会导致Message-ID标头仅在第一次设置时才设置(如果尚未设置).


big*_*mus 5

在发送消息之前,未设置messageID。

如果要设置自定义消息,我相信您需要像这样覆盖MimeMessage:

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);
   }  
}
Run Code Online (Sandbox Code Playgroud)

此外,某些电子邮件服务(例如gmail)要求messageID符合某种语法(几乎类似于电子邮件地址),您可以在此处查看