11

SMTP を使用org.springframework.mail.javamail.JavaMailSenderして電子メールを送信するために使用しているため、Message-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);
}
4

2 に答える 2

16

message.getMimeMessage().saveChanges()の前に試してくださいmessage.getMimeMessage().getMessageID()

メッセージを作成するときにもこれが必要です。

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

これにより、Message-ID ヘッダーがまだ設定されていない場合、初回のみ設定されます。

于 2012-12-21T08:52:58.427 に答える
5

メッセージが送信されるまで、メッセージ ID は設定されません。

カスタム メッセージを設定する場合は、次のように 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);
   }  
}

また、一部の電子メール サービス (gmail など) では、messageID が特定の構文 (電子メール アドレスとほぼ同じ) に適合する必要があります

于 2012-12-21T08:50:26.760 に答える