如何检查邮件是否已成功发送

我正在开发一个Asp.Net应用程序,如果他忘记了密码,我将向用户的电子邮件地址发送邮件。

我想检查邮件是否已成功发送。 有没有什么方法可以肯定地知道。

编辑

如果电子邮件ID不存在,那么我会检测到失败。

如果您的SmtpMail.Send(message)方法没有返回任何错误,则表示该电子邮件已发送到SMTP服务器,那么您不在您的管辖范围内,这就是您可以知道的距离。

如果你正在使用System.Net.Mail试试

 message.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnSuccess; 

将.Send(msg)方法放在try catch块中,并捕获SmtpFailedRecipientException。

 try { mail.Send(msg); } catch (SmtpFailedRecipientException ex) { // ex.FailedRecipient and ex.GetBaseException() should give you enough info. } 

根据规格 :

 S: 220 smtp.example.com ESMTP Postfix C: HELO relay.example.org S: 250 Hello relay.example.org, I am glad to meet you C: MAIL FROM: S: 250 Ok C: RCPT TO: S: 250 Ok C: RCPT TO: S: 250 Ok C: DATA S: 354 End data with . C: From: "Bob Example"  C: To: Alice Example  C: Cc: theboss@example.com C: Date: Tue, 15 Jan 2008 16:02:43 -0500 C: Subject: Test message C: C: Hello Alice. C: This is a test message with 5 header fields and 4 lines in the message body. C: Your friend, C: Bob C: . S: 250 Ok: queued as 12345 C: QUIT S: 221 Bye {The server closes the connection} 

一旦服务器说250 Ok: queued as 12345 ,你就无法确定它是否真的发送了一封电子邮件,或者它是否已经发送。

不。电子邮件(基于SMPT)是一种不可靠的传输协议,虽然有一些黑客可以检测到已经收到并阅读了电子邮件,例如通过在电子邮件中嵌入个性化图像URL并跟踪图像已经收件人的客户要求,没有绝对可靠的方式来满足您的要求。

如果发送问题, SmtpClient.Send方法将引发exception。 但除了将该消息发送到SMTP服务器之外,没有办法知道它是否从那里到达目的地。

您可以使用DeliveryNotificationOptions来接收收据。

如果您有一个名为mail的MailMessage对象,请执行以下操作:

 mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; 

我正在使用gmail SMTP与我的程序发送邮件。 即使使用SmtpFailedRecipientException陷阱,发送的假邮件也会返回Ok。

但是,当我查看我的Gmail收件人时,我看到邮件没有发送解释。 主题传递状态通知(失败)

我的问题是有可能在程序中获得这个通知。

我发现了这个,但它不适用于POP

当SMTP服务器收到新电子邮件时,通知C#客户端