我一直在查看 Stackoverflow 和 Serverfault 上的问题,但没有发现提到的相同问题 - 尽管这可能是因为我对电子邮件的工作原理了解不够,无法理解其中一些问题实际上与我的问题相同......这是我的情况:
我有一个使用 .Net 的 SmtpClient 发送电子邮件的 Web 应用程序。SmtpClient 的配置使用 smtp 服务器、用户名和密码。SmtpClient 代码在具有不在 smtp 服务器所在域中的 IP 地址的服务器上执行。
在大多数情况下,电子邮件发送都没有问题 - 但 AOL 除外(也许其他公司也是如此 - 但这是我们现在肯定知道的)。
当我查看从 AOL 退回的邮件标题时,发现它比 Hotmail 收到的成功邮件少了一行:
AOL 坏消息:
Received: from WEBSVRNAME ([##.###.###.###]) by domainofsmtp.com with MailEnable ESMTP; Mon, 18 Jun 2012 09:48:24 -0500
MIME-Version: 1.0
From: "[email protected]" <[email protected]>
...
好的 Hotmail 消息:
Received: from mail.domainofsmtp.com ([###.###.###.###]) by subdomainsof.hotmail.com with Microsoft SMTPSVC(6.0.3790.4900); Thu, 21 Jun 2012 09:29:13 -0700
Received: from WEBSVRNAME ([##.###.###.###]) by domainofsmtp.com with MailEnable ESMTP; Thu, 21 Jun 2012 11:29:03 -0500
MIME-Version: 1.0
From: "[email protected]" <[email protected]>
...
请注意,Hotmail 邮件标题有一行附加内容。
我很困惑为什么 Web 服务器的名称和 IP 地址甚至在标题中,因为我以为我正在使用 SmtpClient 来通过 smtp 服务器(因此需要有效电子邮箱的用户名和密码)。
我读过有关 SPF、DKIM 和 SenderID 的文章,但目前我不确定是否需要对 Web 服务器(及其 IP/域)或 smtp 发送域进行操作。以前有人做过类似的事情吗?
我是否将 smtp 服务器用作中继?任何有关如何描述我正在做的事情的帮助也会有所帮助。
答案1
您可以采取以下措施来解决 AOL 和其他公司的问题:
首先,要知道 AOL 和其他公司使用以下方法来防止垃圾邮件:拒绝来自没有反向查找记录的电子邮件域的电子邮件,灰名单或者使用SPF 记录。你应该检查每一个。灰名单会在执行 smtpclient send 方法时返回错误。
接下来,您可以检查正在执行发送方法的服务器,查看它是否引发任何错误,或者错误是否在 try catch 块中被忽略。
另外,你可以远程登录到你的 SMTP 服务器并执行EHLO 测试看看您是否可以看到任何问题。
有关 AOL 阻止政策的更多信息,请参见此处:http://postmaster.aol.com/Postmaster.Errors.php
其他电子邮件域名可能使用类似的方法来防止垃圾邮件,因此您可能也需要遵循相同的故障排除方法。
答案2
一些观点:
默认情况下,大多数 SMTP 服务器都包含原始主机的 Received: 标头,即使它不是 SMTP 服务器。
每当您通过 SMTP 服务器发送消息时,您都在将其用作中继。
大多数垃圾邮件过滤器都会查看所有 Received: 标头。通常,每个标头都会经过黑名单检查,并检查反向映射有效性以及域密钥和 SPF 检查。因此,您需要确保它们都在您的 SPF 记录中被允许并且具有有效的反向映射,并且它们都没有被列入黑名单。
我怀疑您看到的差异是 AOL 没有添加引用您的邮件服务器的 Received: 标头,因为它退回了该邮件(正如术语所暗示的那样,该标头由邮件经过的每个服务器添加,以指示该邮件最后从哪个服务器接收)。看来 hotmail SMTP 服务器在本例中确实添加了它。这对于故障排除目的来说并不重要。