标记收件人:地址如 [email protected] config

标记收件人:地址如 [email protected] config

好的,我需要在我的服务器上托管一个 PHP 脚本,以便将电子邮件发送到我自己服务器上的“标记”电子邮件地址,例如“[电子邮件保护]“。我也使用自己的服务器作为 SMTP 服务器,PHP 使用其mail()命令。因此,我的服务器既可以发送也可以接收。

为了接收发送到我的服务器上的标记地址的邮件,我已配置 Postfix' main.cf

recipient_delimiter = +

为了发送这些,main.cf还包含:

recipient_canonical_maps = regexp:/etc/postfix/recipient_canonical_maps

这些“规范映射”由一个正则表达式行组成:

/^(.+)\+.+@(.*)/ ${1}@${2}

现在:

(1)

电子邮件发送至:[电子邮件保护],通过我的现场 PHP 脚本甚至从 Linux shell 重写并发送到[电子邮件保护],将从标题+tag中删除To:,保留原样,并插入[email protected]一个附加标题。X-Original-To: [email protected]

我可以理解这种行为,因为我在 中配置了它recipient_canonical_maps。因为如果我不这样做,带有标记地址的电子邮件就不会到达任何地方:

Feb 13 21:00:00 myserver postfix-local[11626]: cannot chdir to mailname dir user+tag: No such file or directory
Feb 13 21:00:00 myserver postfix-local[11626]: Unknown user: [email protected]

(当从 main.cf 中取出 Recipient_canonical_maps 时,/var/log/mail.log)

(2)

同时,客户端软件(例如 Thunderbird)使用我的服务器 SMTP 端口 25 向 等标记地址发送的电子邮件在标题中保留了[email protected]其内容,尽管它们也添加了上述标题。它们被正确地传递到它们所属的位置,即 的邮箱。+tagTo:X-Original-To:[email protected]


我的目标是通过 (1) 实现 (2) 中的行为,即 PHP 脚本或 shell 命令,正确发送电子邮件,同时保留标记的To:地址。

我的问题是:

  • 我可能做错了什么、哪里做错了?
  • 为什么 (1) 和 (2) 表现不同?这是否暗示了需要进一步研究的地方?

任何建议都值得赞赏!

答案1

@AB 的评论让我走上了正确的道路(奇怪的是这条评论消失了);他提到了信封和“真实”To:报头之间的区别。此外,Postfix 在重写报头时确实对远程客户端和本地计算机有所区别:

规范地址映射

Postfix 2.2 及更高版本仅当客户端与 local_header_rewrite_clients 参数匹配时才会重写来自远程 SMTP 客户端的邮件头(...)(参见:http://www.postfix.org/ADDRESS_REWRITING_README.html

Postfixmain.cf有一个参数可以控制重写哪些标题:

recipient_canonical_classes = envelope_recipient, header_recipient

那是我的配置。

我的问题已得到解决删除header_recipient从此设置中。因此,标记的To:标题被保留,电子邮件被传递到其所属的位置。

相关内容