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

我一直在查看Stackoverflow和Serverfault的问题,但还没有find同样的问题 – 虽然这可能是因为我只是不太了解电子邮件如何工作,以了解一些问题是真的和我一样…这是我的情况:

我有一个使用.Net的SmtpClient发送电子邮件的Web应用程序。 SmtpClient的configuration使用smtp服务器,用户名和密码。 SmtpClient代码在具有不在smtp服务器所在的域中的ip地址的服务器上执行。

在大多数情况下,电子邮件没有问题 – 但不是美国在线(也可能是其他人 – 但这是我们现在知道的)。

当我查看从AOL被踢出的消息中的标题时,它比hotmail得到的成功消息less了一行:

AOL坏消息:

Received: from WEBSVRNAME ([##.###.###.###]) by domainofsmtp.com with MailEnable ESMTP; Mon, 18 Jun 2012 09:48:24 -0500 MIME-Version: 1.0 From: "donotreply@domainofsmtp.com" <donotreply@domainofsmtp.com> ... 

好的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: "donotreply@domainofsmtp.com" <donotreply@domainofsmtp.com> ... 

注意hotmail邮件标题有一个额外的行。

我很困惑,为什么Web服务器的名称和IP地址甚至在头,因为我以为我使用SmtpClient通过SMTP服务器(因此需要用户名和密码的有效的电子邮件框)。

我已经读过关于SPF,DKIM和SenderID的信息,但是现在我不确定是否需要对Web服务器(和它的ip / domain)或者smtp来自的域做些什么。 有没有人曾经做过类似的事情?

我是否使用smtp服务器作为中继? 任何帮助如何描述我在做什么也将有所帮助。

下面是一些你可以做的事情来解决你的问题与美国在线和其他人:

首先,要知道AOL和其他人使用的方法来防止垃圾邮件,例如拒绝来自没有反向查询logging , 灰名单或使用SPFlogging的 电子邮件域的电子邮件 。 你应该检查每个这些。 当执行smtpclient发送方法时,灰名单会返回一个错误。

接下来,如果您可以检查正在执行send方法的服务器,看它是否抛出任何错误,或者在try catch块中忽略错误。

此外,您可以telnet到您的SMTP服务器,并进行EHLOtesting ,看看您是否可以查看任何问题。

有关AOL阻止政策的详细信息,请访问http://postmaster.aol.com/Postmaster.Errors.php

其他电子邮件域可能使用类似的方法来防止垃圾邮件,因此您可能需要遵循相同的故障排除方法。

一些观点:

默认情况下,即使SMTP服务器不是SMTP服务器,大多数SMTP服务器也包括始发主机的Received:标头。

任何时候通过SMTP服务器发送消息,您都将其用作中继。

大多数垃圾邮件filter将查看所有Received:标题。 他们每个人通常运行黑名单,并检查反向映射的有效性,以及域密钥和SPF检查。 因此,您需要确保您的SPFlogging中都允许使用这两种文件,并且具有有效的反向映射,并且它们都不在黑名单中。

我怀疑你所看到的不同之处在于,AOL并没有添加引用邮件服务器的Received:标题,因为它反弹了邮件(正如术语所暗示的那样,邮件经过的每个服务器都添加了这个标题,以指示从哪个服务器收到的邮件持续)。 在这种情况下,似乎hotmail SMTP服务器确实添加了它。 这对于故障排除来说并不重要。