是否可以更改 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 这样做:
添加到末尾
/etc/postfix/main.cf
header_checks = regexp:/etc/postfix/header_checks
插入替换字符串
header_checks
/Message-Id:\s+<(.*?)@hostname>/ REPLACE Message-Id: <[email protected]>
运行 postmap
postmap /etc/postfix/header_checks
重启 postfix
service postfix restart
答案2
为什么不尝试在 postfix 中重写消息 ID,而是让 javamail 从一开始就生成正确的 MessageID。您可以通过子类化MimeMessage
并提供新updateMessageID
方法来更改 javamail 生成 MessageID 的方式
答案3
你为什么要这样做?正如@BenPilbrow 指出的那样,消息 ID 几乎没有意义。几乎唯一会使用它的东西就是线程电子邮件客户端。
正如@stew 指出的那样,您首先可以发送一封带有正确消息 ID 的电子邮件。
最后,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 中解决了该问题。