【发布时间】:2011-01-21 11:55:33
【问题描述】:
我正在开发一个 Asp.Net 应用程序,如果他忘记了密码,我会向用户的电子邮件地址发送邮件。
我想检查邮件是否发送成功。 有什么方法可以确定。
编辑
如果电子邮件 ID 不存在,那么我会检测到失败。
【问题讨论】:
我正在开发一个 Asp.Net 应用程序,如果他忘记了密码,我会向用户的电子邮件地址发送邮件。
我想检查邮件是否发送成功。 有什么方法可以确定。
编辑
如果电子邮件 ID 不存在,那么我会检测到失败。
【问题讨论】:
我正在使用 gmail SMTP 通过我的程序发送邮件。即使使用 SmtpFailedRecipientException 陷阱,发送的假邮件也会返回 Ok。
但是,当我查看我的 gmail 收件人的 Outlook 时,我发现邮件没有发送并附有解释。带有主题的传递状态通知(失败)
我的问题是可以在程序中获得此通知。
我找到了这个,但它不适用于 POP
【讨论】:
您可以使用 DeliveryNotificationOptions 接收收据。
如果您有一个名为 mail 的 MailMessage 对象,请执行以下操作:
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
【讨论】:
如果您使用 System.Net.Mail,请尝试
message.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnSuccess;
【讨论】:
message.Headers.Add("Disposition-Notification-To", "youremail@email.com");,如果消息成功,它将向“youremail@email.com”发送一封电子邮件。还有一个枚举值System.Net.Mail.DeliveryNotificationOptions.OnFailure,如果失败会发送通知
将 .Send(msg) 方法放在 try catch 块中,然后捕获 SmtpFailedRecipientException。
try
{
mail.Send(msg);
}
catch (SmtpFailedRecipientException ex)
{
// ex.FailedRecipient and ex.GetBaseException() should give you enough info.
}
【讨论】:
如果发送出现问题,SmtpClient.Send 方法将引发异常。但除了将该消息发送到 SMTP 服务器之外,没有办法知道它是否会从那里到达目的地。
【讨论】:
没有。电子邮件(基于 SMPT)是一种不可靠的传输协议,尽管有一些黑客可以检测到电子邮件已被接收和阅读,例如通过在电子邮件中嵌入个性化的图像 URL 并跟踪收件人的客户已请求该图像,没有绝对可靠的方法可以满足您的请求。
【讨论】:
根据spec:
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:<bob@example.org>
S: 250 Ok
C: RCPT TO:<alice@example.com>
S: 250 Ok
C: RCPT TO:<theboss@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <bob@example.org>
C: To: Alice Example <alice@example.com>
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,你就无法确定它是否真的发送了一封电子邮件,或者它是否已送达。
【讨论】:
如果您的SmtpMail.Send(message) 方法没有返回错误,则表示邮件已发送到SMTP 服务器,那么您不在您的管辖范围内,这就是您可以知道的距离。
【讨论】: