sendmail、exim 或 php 邮件设置以避免在 vps 上出现“发件人地址被拒绝:找不到域”

sendmail、exim 或 php 邮件设置以避免在 vps 上出现“发件人地址被拒绝:找不到域”

我有一个设置了多个域的 VPS。一些域有发送电子邮件的 PHP 站点。结果发现一些电子邮件服务器拒绝这些电子邮件,并显示错误:“发件人地址被拒绝:未找到域”。(这来自服务器上 exim_mainlog 中的日志)。

有趣的是,它报告用作发件人的域不是我在 php mail() 中设置的域,而是一个内部服务器名称。

例如,如果我的 VPS 主域是 mymasterdomain.com 并且我有多个站点(例如 site1.com、site2.com 等),那么发送电子邮件的 php 程序将发送带有标题中设置的发件人字段的电子邮件到:[电子邮件保护]但邮件将被拒绝,并显示“发件人地址被拒绝:未找到域名[电子邮件保护]“”。

com.mymasterdomain.com 是托管公司内部识别我的 VPS 服务器的方式,显然它无法解析任何东西。

SPF 记录已正确设置,以包含站点的 IP 地址。我使用 php 将同一封电子邮件发送到两个地址进行了测试。一个地址拒绝了它,但另一个在 gmail 帐户上接受它,这让我可以查看标题。

我可以看到问题-标题有:


已收到:来自 cpanelSite1Account,发送者为 com.mymasterdomain.com,本地(Exim 4.91)(信封发件人)id 1fWXCF-0006ED-Vv;2018 年 6 月 22 日星期五 09:37:56 -0500

到:[电子邮件保护]

主题:收到新询问

X-PHP-Script:www.site1.com/inquire_process.php 适用于 XXX.XXX.XXX.XXX

X-PHP-原始脚本:522:inquire_process.php

从:[电子邮件保护]


[发件人:] 是正确的,但是 [收到:来自] 包含 VPS 信息,这给我带来了麻烦。

我该如何修复这个问题?在 php 中?在 cpanel 中?在 sendmail 或 exim 设置中?任何帮助都将不胜感激 - 我已经为此烦恼了一段时间了...

答案1

可能会发生以下情况:

  1. 接收 MTA 检查是否存在信封发件人而不是From:标题。
  2. PHP 函数调用的 Sendmailmail()使用[email protected]作为信封发件人,[email protected]标题参数mail(to,subject,message,headers,parameters);仅用于生成邮件头。
  3. Sendmail 从 中为其自身找到的第一个主机获取其自己的主机名/etc/hosts

您可以在任何级别修复此问题(按相应顺序的解决方案,而不是最好的解决方案):

  1. 通过添加记录使用作信封发件人的域/主机名存在A
  2. 使用额外的范围向 Sendmail 提供信封发件人:

    mail('[email protected]','subject','message',
         'From: [email protected]',
         '-f [email protected]');
    

    man sendmail

    -f sender
    

    设置信封发件人地址。这是发送递送问题的地址。

  3. /etc/hosts在您的行中添加现有主机名127.0.0.1或实际服务器 IP。这必须是A来自现有域的记录,指向您的服务器。

我认为解决方案#2 最接近您的目标,而解决方案#1 和#3 可能会解决背后的问题。

相关内容