如何跟踪电子邮件是否成功地在成千上万(IIS 6,.NET 3.5)

我想知道发送给用户的邮件是否成功。

我试过看SMTP日志,似乎没有办法链接服务器请求与服务器响应。 所以如果我得到一个错误550,并且尝试的地址不包括在响应中,我无法知道什么地址或什么请求失败。

在日志或发送的代码中寻找解决scheme。

一些背景:
一个正确configuration的服务器应该立即告诉你,如果邮件不会被传送。

iirc:最初的SMTP服务器是这样做的,但是后来被认为是一个安全漏洞,用来显示用户是否存在于系统中,所以他们开始接受所有的信息,然后反弹。 但垃圾邮件发送者使用弹跳来“回弹垃圾邮件目标”来传递垃圾邮件。 所以现在我们又回到了根据中继规则立即拒绝电子邮件。

这意味着在大多数情况下,您可以确定电子邮件是否已发送。 但只有当你直接与收件人电子邮件服务器通信。 这意味着你的应用程序需要做很多工作:MX-lookup,TCP连接到一个可能使用tarpit的缓慢的服务器,所以它的速度很慢,处理超时等等。问题是你不能处理暂时的服务器下来很好。

如果您通过将邮件发送到中继服务器(如本地IIS SMTP服务器或ISP)来发送电子邮件,那么检测退信的唯一方法是在邮件中设置退信标题,并检查退回邮件是否为退回邮件。 这不是一个不寻常的问题。 但是,根据SMTP链上服务器的重试设置,所有反弹都可能需要5天以上的时间才能恢复。

这个问题通常是通过简单地将url添加到消息中的图像来解决的。 当用户点击“下载内容”时,图像被下载,您可以确认接收。 该图像可能是http://server.com/[email protected] ,也可能是您使用Response.SendFile发送图像的aspx页面(您可能需要设置Content-inputResponse.Header也)。

我知道的唯一方法是绕过IIS的SMTP服务器并直接发送。 你可以谷歌周围,find一些组件,它会为你做,而且这里有一个原始的TCP版本的链接:

这当然不意味着信息被接收/传递或者没有反弹。 这只是表示MXlogging中列出的SMTP接受了该消息。 它可能已经破坏了它,它可能会稍后反弹,它可能会传递给用户。