我的服务器遇到了这个问题:
- 域示例.com用于发送电子邮件,我有一个 php 网站
- 服务器服务器.example.com
- 服务器示例2.com.mx通过 php 系统发送电子邮件
example.com 和示例2.com.mx是来自的域名服务器.example.com,当我向该帐户发送电子邮件时[电子邮件保护]到 Gmail 传递并显示 DKIM 签名,但是当我尝试从 php 表单发送电子邮件时示例2.com.mx通过电子邮件[电子邮件保护]DKIM 失败表明该帐户已登录但尚未签名。
example2.com.mx 中的系统具有 php 和 Zend 1 框架,server.example.com 在域 example.com 和 example2.com 中具有 WHM centos 6 和 Cpanel
例如,Gmail 在使用 php 的电子邮件中返回以下内容:
dmarc=失败(p=NONE sp=NONE dis=NONE)header.from=example.com
我希望你能帮助我
谢谢 :D
答案1
让我们分解一下,因为这里有几个不同的组件为您工作。
如果我没看错的话,所有电子邮件的发件人电子邮件地址都是 @example.com(无论发送它们的服务器是什么),因此我的以下项目都调整为从 @example.com 发送
此外,您真正的问题似乎出在 DKIM 上(因为您收到了电子邮件,但看不到它已签名)。我包括了其他需要清理的东西,从长远来看这对您有帮助。
密钥管理信息系统
由于您注意到有时会在 Gmail 中收到声称已通过 DKIM 签名的邮件,因此我假设您的选择器部分正确无误,并且出站邮件服务器正确地将 DKIM 签名添加到您的出站邮件中。 问题听起来像是您没有为 PHP 网页设置出站邮件服务器来执行 DKIM 签名。最简单的方法是让您的 Web 服务器通过您的邮箱使用的同一邮件服务器发送电子邮件;他们已经证明他们正确地签署了消息,这会将您的邮件流整合到一条路由中。
这很重要,因为 DKIM 是此设置中唯一需要您修改邮件流的部分。SPF 和 DMARC 是向接收服务器发出的基于 DNS 的指令,告诉它们如何检查和处理声称来自您域的虚假邮件。DKIM 实际上会修改来自您服务器的邮件,以便证明它 100% 来自您。如果您发送的电子邮件中没有 DKIM 签名标头,则说明您没有正确签名出站电子邮件,DMARC 稍后将失败。
您当前在 DNS 中的 DKIM 记录有点多,事实上,您似乎包含了一些用于邮件标头而不是 DNS 的元素;并且您的测试标志的值不正确,为“t=s”。对于大多数需要 DKIM 的用途,DNS 记录非常简单;例如,只有 2 或 3 个元素,DKIM 版本和公钥(可能还有测试标志)。此外,测试标志设置为“t=y“否则你会遇到问题。
由于我们仍在测试,我将包括测试标记,但请确保在一切正常后将其删除。
供测试用
com.example._domainkey.selector TXT“v=DKIM1;t=y;p=[公共 DKIM 签名密钥]”
用于生产(删除测试标志)
com.example._domainkey.selector TXT“v=DKIM1;p=[公共 DKIM 签名密钥]”
其他一切都是不必要的,所以让我们稍微清理一下。DNS 条目所做的就是向全世界提供您的私钥副本,以便他们可以自己检查签名。(并列出此域仍在测试 DKIM,因此不要仅仅因为未通过 DKIM 检查就拒绝消息)
DKIM 记录与电子邮件发件人行中的域有关。因此,如果您的邮件来自 @example.com,那么将使用 DKIM。
防晒指数
发件人策略框架用于确定哪些服务器可以发送声称来自您域的电子邮件。您的 SPF 记录中列出了几个通常不会在强设置中使用的元素。还有一个一般语法错误,您使用了太多的“+”符号。您不需要在每个元素前都使用“+”。事实上,根据您的记录,您的 SPF 记录中的任何地方都不需要“+”,请将其删除。
- 麦克 :这表示任何可以为该域接收邮件的服务器(邮件交换器)也可以从您的域发送出站邮件。 这个元素相当常见,尤其是在较小的邮件系统中。
- A :这个让我有点困扰。这个元素表示“我的域中任何具有 A 记录的事物都可以从我的域发送电子邮件。”这通常过于宽容,可能会让太多事物发送(实际上是 DNS 中的任何主机)。 我会考虑删除这个元素,除非你绝对必须拥有它。
- ip4 :这个很简单。允许此 IP 地址为该域发送电子邮件。如果您拥有永远不应更改的静态 IP 地址,那么这是一个不错的方法。如果您列出所有授权发送服务的 IP 地址,那么您不需要A或者麦克元素,因为它们是多余的。
- 包括 :此元素表示您要使用位于附加到包含元素的地址处的 SPF 记录。这仅在您在其他地方设置了良好的 SPF 并且需要将其添加到其他位置时使用。最常见的是,当您使用第三方电子邮件提供商(O365/Outlook/Hotmail、Google Apps、Yahoo for Biz 等)并设置您的域以允许他们的服务器代表您的域发送时,就会看到这种情况。如果您使用电子邮件营销公司代表您发送群发邮件,它也很有用。 我发现您极不可能需要来自 4 个不同邮件主机的邮件,您可能应该删除其中的大部分(如果不是全部的话)。(如果您使用其中一个主机,请确保使用他们在说明中给出的准确内容)。
- -全部 :这是一条重要记录。它是特殊的“全部”通配符,用“-”修饰。这意味着任何与前面的条目不匹配的内容都应被拒绝和阻止。这是一条硬故障指示器,一旦一切按预期运行,使用起来就很方便。 *如果您已经将此域名用于电子邮件,并且现在才设置 SPF(或 DMARC),那么您可能需要暂时使用“~”软失败指示器。这样电子邮件就会被投递(尽管它们可能会被标记为可疑,或者由于软失败而接受额外的垃圾邮件检测)。一旦一切设置完毕并按您的需要运行,请返回“-”硬失败。*
不知道你的域名,我无法测试你的A和麦克通过 DNS 记录。但由于您确实列出了大量 IPv4 项目,因此我将 SPF 记录简化为类似以下内容。
供测试用
com.example. TXT "v=spf1 ip4:[发送电子邮件的服务器的 IP] ip4:[server.example2.com.mx 的 IP 地址] ~all"
用于生产(拒绝不是来自您的服务器的消息)
com.example. TXT "v=spf1 ip4:[发送电子邮件的服务器的 IP] ip4:[server.example2.com.mx 的 IP 地址] -all"
如果您需要额外的 IP 地址(更多服务器或在服务器上添加接口),则可以拥有多个 ip4:元素。
这里最重要的部分是,SPF 的 TXT 记录是在 DNS 中为领域邮件发件人。IP4:SPF 的元素指示允许发送邮件的服务器的 IP。它们不必是同一域的服务器,但它们必须是允许为该域发送电子邮件的所有 IP。
DMARC
DMARC 的特殊之处在于它不对电子邮件的有效性进行任何检查,它只是告诉其他服务器如果电子邮件未通过 SPF 或 DKIM 检查该如何处理。
看起来您的 DMARC 记录正在告诉服务器永远不要拒绝或隔离邮件,即使是命令的失败部分(“p=none; sp=none”)。只要您记得在完成测试后将其调高一点,这对测试来说就很好了。
此外,记录的 DKIM 和 SPF 标识符对齐元素默认为“宽松”(推荐设置),因此您可以忽略这些元素以简化一点。除此之外,这个看起来还不错。
供测试用
com.example._dmarc TXT“v=DMARC1;p=无;sp=无;pct=100;”
对于生产(硬性拒收或失败)
com.example._dmarc TXT“v=DMARC1;p=拒绝;sp=拒绝;pct=100;”