用 mail() 设置 Sender-header

Set Sender-header with mail()

问题的简短版本:

如何在 PHP 中使用 mail() 发送邮件时将发件人:header 设置为网站管理员@ourdomain.com?

(发件人:header,不是发件人:header)

长版:

我们的服务器发送的邮件被错误地识别为垃圾邮件,我们遇到了问题。普通邮件(来自邮件客户端)没有这个问题(DKIM/SPF 一切正常)。

普通邮件和服务器发送邮件的最大区别在于"Sender:" header。从邮件客户端发送邮件时一切正常:

From: name@ourdomain.com
X-Sender: name@ourdomain.com

通过 PHP 发送的邮件中的 header 内容为:

From: name@ourdomain.com
Sender: admin@vps1949.ourvpsprovider.com  

第二个邮件地址确实存在,但我绝对不希望我们的管理员邮件地址出现在那里。管理员地址使一些邮件服务器认为它是垃圾邮件——这绝对不是。 (它被视为垃圾邮件,因为,即使我们在 vps1949.ourvpsprovider.com 的 DNS 中有 MX 记录和 SPF 记录,邮件服务器也无法识别这些记录。我只是 DNS 的中等经验,不足以理解为什么会这样。)

ourdomain.com和vps1949.ourvpsprovider.com当然指向同一个IP。

那么,在 PHP 中使用 mail() 发送邮件时,如何将发件人:header 设置为 webmaster@ourdomain.com?那会为我们解决它。

(发件人:header,不是发件人:header)

这将解决我们所有的问题。

Google 运气不好,我搜索了几个小时并尝试了几种方法都无济于事。 (例如,sendmail 上的 -f 标志不是解决方案。)

由于我们有一个 VPS,我拥有完整的服务器访问权限,因此如果需要,可以更改或添加 ini 文件。 (我找不到 sendmail.ini。)

有人可以帮忙吗?

考虑为服务器的 IP 地址设置反向 DNS 值。这必须由您的 ISP 完成。不正确的值将导致邮件进入垃圾文件夹。

我通过更改服务器上的主机名解决了这个问题。我找到了 How to change envelope from address using PHP mail? 并采纳了每个人都不喜欢的答案。有效。终于,花了好几个星期才找到这个……太简单了。

对于在 CentOs 7 上拥有相同且碰巧 运行 的任何人: http://www.itzgeek.com/how-tos/linux/centos-how-tos/change-hostname-in-centos-7-rhel-7.html