如何使用 javax.mail 设置或更改 SMTP 邮件 ID?

2022-09-02 09:04:10

如何使用 . 发送邮件时设置 SMTP 邮件 ID。我的邮件服务器报告如下内容:javax.mail

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

我想在发送之前设置。这可能吗?它创建的电子邮件如下所示:id=2043289758.9.1322829290422.JavaMail.thor@developer.local

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);

答案 1

我相信JavaMail FAQ的这一部分回答了你的问题:

问:我为新邮件的 Message-ID 标头设置了一个特定值,但是当我发送此消息时,该标头被重写。

一个:在调用 saveChanges 方法时(通常在发送消息时隐式设置),将覆盖您自己设置的任何值,从而为 Message-ID 字段设置新值。如果需要设置自己的 Message-ID 并保留它,则必须创建自己的 MimeMessage 子类,覆盖 updateMessageID 方法并使用此子类的实例。

class MyMessage extends MimeMessage {
    ...

    protected void updateMessageID() throws MessagingException {
  setHeader("Message-ID", "my-message-id");
    }
    ...
}

答案 2

根据 Oracle 的常见问题解答,当您发送消息或调用 saveChanges 时,由 updateMessageID() 方法设置的 Message-Id 标头,它将覆盖您可能已经设置的任何值。

要设置自己的值,您需要创建一个 MimeMessage 的子类,并实现您自己的 updateMessageID() 函数:

class MyMimeMessage extends MimeMessage {
    ...
    protected void updateMessageID() throws MessagingException {
        setHeader("Message-ID", "my-message-id");
    }
    ...
}

我能够使用这种技术来抑制或消除Message-Id标头,如下所示:

@Override
protected void updateMessageID() throws MessagingException {
    removeHeader("Message-Id");
}

这对于Mailgun很有用,如果您不设置消息ID,它会自动设置Message-Id。


推荐