使用 .Net 的 SmtpClient 发送电子邮件时出现问题

使用 .Net 的 SmtpClient 发送电子邮件时出现问题

我一直在查看 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 服务器在本例中确实添加了它。这对于故障排除目的来说并不重要。

相关内容