我使用C#通过System.Net.Mail发送电子邮件。
但是,我如何知道电子邮件是否已成功发送或失败?
SmtpClient.Send
将抛出一个 SmtpFailedRecipientsException(如果有连接问题,则会抛出一个SmtpException)。考虑到电子邮件是一次性发送的,这可能非常困难。除非出现异常,表示由于错误凭据等客户端-服务器通信问题,否则您无法知道邮件是否成功发送(即:到达收件人)。
就我个人而言,我从未找到过这个问题的答案,因为你无法保证离开你的邮件不会立即被丢弃。你可以尝试检查发送邮箱是否有NDR(未送达报告),但并不总是能够得到。
如果您的意思是发送成功,那么像其他帖子中所说,如果无法发送,则会收到异常。如果您实际上是指接收成功,那就完全不同了。SMTP根本没有机制可以找出消息是否已被收件人接收,有时服务器无法传递时会收到NDR,而其他时候则不会。您可以尝试做垃圾邮件发送者所做的事情,即在HTML电子邮件正文中放置某种图像链接,并在查询字符串中放置唯一标识符。这将允许您将点击图像URL的人与电子邮件链接起来。但是,如果收件人可能仅仅是不允许在其电子邮件客户端中显示图像,那么这只能告诉您电子邮件已被阅读,而不能告诉您电子邮件未被接收。