如何跟踪数千封电子邮件是否成功(IIS 6、.NET 3.5)

Mic*_* B. 4 smtp

我希望能够判断发送给用户的电子邮件是否成功。

我试过查看 SMTP 日志,但似乎无法将服务器请求与服务器响应联系起来。因此,如果我收到错误 550 并且尝试的地址未包含在响应中,则我无法知道它失败的地址或请求是什么。

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

Ted*_*sen 7

一些背景:
如果邮件无法送达,正确配置的服务器应该会立即告诉您。

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

这意味着,在大多数情况下,你可以决定是否电子邮件已发送与否。但前提是您直接与接收方的电子邮件服务器通信。这意味着您的应用程序需要做很多工作:MX 查找、TCP 连接到可能使用tarpit的潜在慢速服务器,因此它该死的慢,处理超时等。问题是您不会处理临时服务器下来很好。

如果您通过将电子邮件传送到中继服务器(例如您的本地 IIS SMTP 服务器或您的 ISP)来发送电子邮件,那么检测退回邮件的唯一方法是在邮件中设置退回邮件头并检查退回邮件的退回帐户。这并不是一种罕见的方法。但是,根据链中 SMTP 服务器上的重试设置,所有退回邮件最多可能需要(甚至超过)5 天才能恢复。

这个问题通常可以通过简单地将 url 添加到消息中的图像来解决。当用户点击“下载内容”时,图像被下载,您可以确认接收。图像可能是http://server.com/image.jpg?user=some@user.com或者它可能是您制作的使用 Response.SendFile 发送图像的 aspx 页面(您可能想要设置 Content-也输入 Response.Header )。