C# 如何知道我是否使用System.Net.Mail成功发送电子邮件

C# 如何知道我是否使用System.Net.Mail成功发送电子邮件,c#,.net,email,C#,.net,Email,我使用C#通过System.Net.Mail发送电子邮件 但是,我怎么知道电子邮件发送成功还是失败呢?考虑到电子邮件是“火与忘”,这可能相当困难。除非您遇到异常,表明由于错误的凭据等原因导致客户端-服务器通信问题,否则您无法知道邮件是否成功发送(意思是:到达收件人)。当然不是直接的答案,但这是Coding Horror中关于通过代码发送电子邮件的一篇精彩文章,这就解决了你的问题。我个人从来没有遇到过这个问题的答案,因为你没有办法保证离开你所在地的邮件不会一离开你就被扔掉。您可以尝试检查发送邮箱中

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


但是,我怎么知道电子邮件发送成功还是失败呢?

考虑到电子邮件是“火与忘”,这可能相当困难。除非您遇到异常,表明由于错误的凭据等原因导致客户端-服务器通信问题,否则您无法知道邮件是否成功发送(意思是:到达收件人)。

当然不是直接的答案,但这是Coding Horror中关于通过代码发送电子邮件的一篇精彩文章,这就解决了你的问题。

我个人从来没有遇到过这个问题的答案,因为你没有办法保证离开你所在地的邮件不会一离开你就被扔掉。您可以尝试检查发送邮箱中是否有NDR(无送达报告),但您并不总是被授予获取NDR的权限。简单的回答是,如果是可检测的故障,则
SmtpClient.Send将抛出一个(如果存在连接问题,则抛出一个)

答案很长,因为很多原因,你不一定会得到例外。这可能是因为SMTP服务器正在缓冲发送(或者如果您将其设置为本地iis或本地目录),或者只是因为SMTP服务器不支持返回这些错误代码

大多数广告邮件系统通过设置有效的“发件人地址”并监控该帐户的收件箱来跟踪回退。然而,即使这样也不是万无一失的(例如,办公室外的消息)


我会坚持捕捉异常并留下其他异常。如果你不确定电子邮件是否有效,也许你应该向用户发送一个代码,让他们验证他们的电子邮件地址。

如果你的意思是成功发送,那么正如其他海报所说,如果无法发送,那么你将得到一个例外。如果你的意思是成功地接受,那就完全不同了。SMTP根本没有一种机制来确定收件人是否已收到邮件,如果服务器无法发送邮件,有时您会收到ndr,而其他时候则不会。你可以尝试做垃圾邮件发送者做的事情,那就是在你的html电子邮件正文中添加某种图像链接,在查询字符串中添加一个唯一的标识符。这将允许您将点击图像url的人与电子邮件链接。然而,这只会告诉你,如果url被点击,电子邮件已经被阅读,它不会告诉你电子邮件没有收到,因为收件人可能根本不允许在他们的电子邮件客户端中显示图像