如何使用javax.mail设置或更改SMTP邮件ID?
使用如何使用javax.mail设置或更改SMTP邮件ID?,java,smtp,jakarta-mail,Java,Smtp,Jakarta Mail,使用javax.mail发送邮件时,如何设置SMTP邮件id。我的邮件服务器正在报告如下内容: 1 <= me@domain.com H=mail (host) [192.168.1.4] P=esmtp S=142014 id=2043289758.9.1322829290422.JavaMail.thor@developer.local 2 => sombodey@else R=dnslookup T=remote_smtp H=mx00.t-online.de [19
javax.mail
发送邮件时,如何设置SMTP邮件id。我的邮件服务器正在报告如下内容:
1 <= me@domain.com H=mail (host) [192.168.1.4] P=esmtp S=142014
id=2043289758.9.1322829290422.JavaMail.thor@developer.local
2 => sombodey@else R=dnslookup T=remote_smtp H=mx00.t-online.de [194.25.134.8]
3 Completed
Properties props = System.getProperties();
props.put("mail.smtp.host", "192.168.1.4");
Session session = Session.getDefaultInstance(props, null);
session.setDebug(false);
Message msg = createMsg();
Transport.send(msg);
@Override
protected void updateMessageID() throws MessagingException {
removeHeader("Message-Id");
}
我相信这一部分回答了你的问题: Q:我为新邮件的邮件ID头设置了一个特定值,但当我发送此邮件时,该头会被重写 A:调用saveChanges方法时,会为Message ID字段设置一个新值(通常在调用消息时隐式设置) 已发送),覆盖您自己设置的任何值。如果您需要设置 如果您拥有自己的邮件ID并保留它,则必须创建自己的邮件ID mimessage子类,重写updateMessageID方法并使用 此子类的实例
class MyMessage extends MimeMessage {
...
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "my-message-id");
}
...
}
根据,当您发送消息或调用saveChanges时,updateMessageID()方法设置的消息Id标头将覆盖您可能已经设置的任何值
要设置自己的值,您需要创建mimessage的子类并实现自己的updateMessageID()函数:
class MyMimeMessage extends MimeMessage {
...
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "my-message-id");
}
...
}
我能够使用此技术抑制或消除消息Id头,如下所示:
1 <= me@domain.com H=mail (host) [192.168.1.4] P=esmtp S=142014
id=2043289758.9.1322829290422.JavaMail.thor@developer.local
2 => sombodey@else R=dnslookup T=remote_smtp H=mx00.t-online.de [194.25.134.8]
3 Completed
Properties props = System.getProperties();
props.put("mail.smtp.host", "192.168.1.4");
Session session = Session.getDefaultInstance(props, null);
session.setDebug(false);
Message msg = createMsg();
Transport.send(msg);
@Override
protected void updateMessageID() throws MessagingException {
removeHeader("Message-Id");
}
这对Mailgun很有用,如果您没有设置邮件Id,它会自行设置邮件Id。您还可以保存邮件更改并在发送前设置自定义邮件Id。 步骤:
MimeMessage message
并设置其数据message.saveChanges()代码>
message.setHeader(“message ID”,yourcustomessageid)代码>
这对于Spring的
JavaMailSender
或其他难以覆盖MimeMessage
的情况非常有用。这是在消息中实现自定义id的完整代码
MimeMessage msg = new MimeMessage(s) {
@Override
protected void updateMessageID() { } // Prevent MimeMessage from overwriting our Message-ID
};
msg.setHeader("Message-ID", "MyOwnMessageID");
public class SendMessage{
private String idMessage;
private void sendEmail() {
//...
// Create de session
//...
Message message = new MyMessage(session);
//...
// Prepare the body of the message, attachments, etc.
//...
// assign custom message id
this.idMessage = “My own ID”;
//send
Transport.send(message);
}
class MyMessage extends MimeMessage {
public MyMessage(Session session) {
super(session);
}
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", this.idMessage);
}
}
}
这是正确的答案。不需要新的类。。。刚刚在调用
.send()方法之前创建。