如何知道使用System.Net.Mail发送邮件是否成功

3

我使用C#通过System.Net.Mail发送电子邮件。

但是,我如何知道电子邮件是否已成功发送或失败?

5个回答

5

当然这不是直接答案,但是这篇文章来自Coding Horror,介绍了如何通过代码发送电子邮件,回答了您的问题。


4
简单的回答是,如果出现可检测的故障,SmtpClient.Send 将抛出一个 SmtpFailedRecipientsException(如果有连接问题,则会抛出一个SmtpException)。
长的回答是,由于许多原因,您不一定会收到异常。这可能是因为您的 SMTP 服务器正在缓冲发送(或者如果您将其设置为本地 iis 或本地目录),或者仅仅是因为 SMTP 服务器不支持返回这些错误代码。
大多数广告邮件系统通过设置有效的“发件人地址”并监视该帐户的收件箱来跟踪退信。即使如此,也不是绝对可靠的(例如,离开办公室的消息)。
我建议捕获异常并留下其他异常。如果您不确定电子邮件是否有效,也许您应该向用户发送一个代码,让他们验证自己的电子邮件地址。

2

考虑到电子邮件是一次性发送的,这可能非常困难。除非出现异常,表示由于错误凭据等客户端-服务器通信问题,否则您无法知道邮件是否成功发送(即:到达收件人)。


1

就我个人而言,我从未找到过这个问题的答案,因为你无法保证离开你的邮件不会立即被丢弃。你可以尝试检查发送邮箱是否有NDR(未送达报告),但并不总是能够得到。


1

如果您的意思是发送成功,那么像其他帖子中所说,如果无法发送,则会收到异常。如果您实际上是指接收成功,那就完全不同了。SMTP根本没有机制可以找出消息是否已被收件人接收,有时服务器无法传递时会收到NDR,而其他时候则不会。您可以尝试做垃圾邮件发送者所做的事情,即在HTML电子邮件正文中放置某种图像链接,并在查询字符串中放置唯一标识符。这将允许您将点击图像URL的人与电子邮件链接起来。但是,如果收件人可能仅仅是不允许在其电子邮件客户端中显示图像,那么这只能告诉您电子邮件已被阅读,而不能告诉您电子邮件未被接收。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接