是否可以更改 Postfix 消息 ID?

是否可以更改 Postfix 消息 ID?

是否可以更改 Postfix 中的消息 ID?如果我通过 Java 应用程序发送邮件,我会收到以下消息 ID:

message-id=<143303043.111334605578921.JavaMail.applicationanme@hostname>

所以我希望消息 ID 看起来像这样:

message-id=<[email protected]>

我可以理解,如果我使用 Linux 程序发送邮件,mail它会起作用:

message-id=<[email protected]>

我已经在 postfix-conf 中设置了主机名,但当我使用 java 应用程序发送邮件时,它不起作用。我们使用中继主机发送电子邮件,任何未@domain.tld在邮件 ID 中发送的消息都将被检测为垃圾邮件。

你知道我该如何修复这个问题吗?

答案1

因为没有人给你提供解决方案后缀插入一个反映您的域名的消息 ID,并且我遇到了同样的问题,我想我可以分享如何让 Postfix 这样做:

  1. 添加到末尾/etc/postfix/main.cf

    header_checks = regexp:/etc/postfix/header_checks

  2. 插入替换字符串header_checks

    /Message-Id:\s+<(.*?)@hostname>/ REPLACE Message-Id: <[email protected]>

  3. 运行 postmap

    postmap /etc/postfix/header_checks

  4. 重启 postfix

    service postfix restart

答案2

为什么不尝试在 postfix 中重写消息 ID,而是让 javamail 从一开始就生成正确的 MessageID。您可以通过子类化MimeMessage并提供新updateMessageID方法来更改 javamail 生成 MessageID 的方式

答案3

  1. 你为什么要这样做?正如@BenPilbrow 指出的那样,消息 ID 几乎没有意义。几乎唯一会使用它的东西就是线程电子邮件客户端。

  2. 正如@stew 指出的那样,您首先可以发送一封带有正确消息 ID 的电子邮件。

  3. 最后,postfix 的解决方案是改变 $ 的值我的主机名,因为这是 Postfix 在创建消息 ID 时在 @ 符号后使用的。

答案4

相关的 Java 属性是mail.host。根据您的应用程序,您可能有一个属性文件,您可以在其中进行如下设置:

mail.host=your.tld

或者使用命令行 -D 选项:

java -Dmail.host=your.tld ...

正如其他人指出的那样,消息 ID 中的域部分几乎 100% 无关紧要 - 垃圾邮件情况除外。我遇到过类似的问题,通过mail程序发送的消息会立即送达,但通过 javamail 发送的消息(从消息 ID 中省略了 TLD)只会延迟送达。通过将完整的 TLD 添加到消息 ID 中解决了该问题。

相关内容