我正在开发一个Asp.Net应用程序,如果他忘记了密码,我会向用户的电子邮件地址发送邮件。
我想检查邮件是否已成功发送。 有没有什么方法可以肯定地知道。
修改
如果电子邮件ID不存在,那么我会检测到失败。
答案 0 :(得分:21)
如果您的SmtpMail.Send(message)
方法没有返回任何错误,则表示该电子邮件已发送到SMTP服务器,那么您不在您的管辖范围内,这就是您可以知道的距离。
答案 1 :(得分:10)
如果你正在使用System.Net.Mail试试
message.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnSuccess;
答案 2 :(得分:8)
将.Send(msg)方法放在try catch块中,并捕获SmtpFailedRecipientException。
try
{
mail.Send(msg);
}
catch (SmtpFailedRecipientException ex)
{
// ex.FailedRecipient and ex.GetBaseException() should give you enough info.
}
答案 3 :(得分:6)
根据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
后,您无法确定是否确实发送了电子邮件,或者是否已发送电子邮件。
答案 4 :(得分:5)
您可以使用DeliveryNotificationOptions来接收收据。
如果您有一个名为mail的MailMessage
对象,请执行以下操作:
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
答案 5 :(得分:4)
没有。电子邮件(基于SMPT)是一种不可靠的传输协议,尽管有一些黑客可以检测到电子邮件已被接收和读取,例如,通过在电子邮件中嵌入个性化图像URL并跟踪收件人客户端请求的图像,没有绝对可靠的方式来满足您的请求。
答案 6 :(得分:4)
如果发送问题,SmtpClient.Send方法将引发异常。但是除了将该消息发送到SMTP服务器之外,没有办法知道它是否从那里到达目的地。
答案 7 :(得分:0)
我正在使用gmail SMTP通过程序发送邮件。即使发送了SmtpFailedRecipientException陷阱,发送的伪邮件也会返回OK。
但是,当我使用Outlook来查看我的gmail收件人时,我看到该邮件没有发送说明。带有主题“交付状态通知”(失败)
我的问题是有可能在程序中得到此通知。
我找到了,但这不是用于POP