java 在使用 Spring JavaMail 发送电子邮件之前检索生成的 Message-ID
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13986692/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Retrieve the generated Message-ID before sending email using Spring JavaMail
提问by Mahendran
I am using org.springframework.mail.javamail.JavaMailSender
to send email using SMTP and in that I need to retrieve the Message-ID header. The below code
我正在使用org.springframework.mail.javamail.JavaMailSender
SMTP 发送电子邮件,因此我需要检索 Message-ID 标头。下面的代码
message.getMimeMessage().getMessageID()
is returning null. How to retrieve the Message-ID?
正在返回空值。如何检索消息 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);
}
回答by Bill Shannon
Try message.getMimeMessage().saveChanges()
before message.getMimeMessage().getMessageID()
.
message.getMimeMessage().saveChanges()
之前尝试message.getMimeMessage().getMessageID()
。
You also need this when creating the message:
创建消息时您也需要这个:
MimeMessage msg = new MimeMessage(session) {
protected void updateMessageID() throws MessagingException {
if (getHeader("Message-ID") == null)
super.updateMessageID();
}
};
That causes the Message-ID header to only be set the first time if it's not already set.
这会导致 Message-ID 标头仅在尚未设置的情况下第一次设置。
回答by biggusjimmus
The messageID doesn't get set until the message is sent.
在发送消息之前不会设置 messageID。
If you want to set a custom message, I believe you need to override MimeMessage like so:
如果您想设置自定义消息,我相信您需要像这样覆盖 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);
}
}
Also, some email services (e.g. gmail) require the messageID to fit a certain syntax (almost like an email address) which you can look at here
此外,某些电子邮件服务(例如 gmail)要求 messageID 符合某种语法(几乎类似于电子邮件地址),您可以在此处查看