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

时间:2010-05-22 12:30:37

标签: c# .net email

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

但我如何知道电子邮件是成功发送还是失败?

5 个答案:

答案 0 :(得分:5)

当然不是直接的答案,但是here编码恐怖中关于通过代码发送电子邮件的精彩文章,它解决了您的问题。

答案 1 :(得分:4)

简单的答案是,如果它是可检测的失败,那么SmtpClient.Send将抛出SmtpFailedRecipientsException(如果存在连接问题,它将抛出SmtpException

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

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

我会坚持抓住例外并留下其他人。如果您不确定电子邮件是否有效,也许您应该向用户发送代码以让他们验证其电子邮件地址。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我个人从来没有遇到过这个问题的答案,因为没有一种方法可以让你收到邮件离开你的位置,一旦它离开你就不会被扔掉。您可以尝试检查发送邮箱是否有NDR(无交付报告)但您并不总是被授予一个

答案 4 :(得分:1)

如果你的意思是成功发送然后其他海报说,如果它不能发送,那么你将得到一个例外。如果你真的意味着成功收到那么这是完全不同的事情。 SMTP根本没有一种机制来查明收件人是否已收到邮件,有时如果服务器无法提供其他时间,您将获得一个ndr。您可以尝试做垃圾邮件发送者所做的事情,那就是在您的html电子邮件正文中使用查询字符串中的唯一标识符放置某种图像链接。这样您就可以将点击图片网址的人与电子邮件相关联。但是,这只会告诉您如果网址被点击已经阅读了电子邮件,它就不会告诉您电子邮件没有被收到,因为收件人可能根本就没有允许图像显示在他们的电子邮件客户端中。