簡體   English   中英

如何檢查郵件是否已成功發送

[英]How to check if the mail has been sent successfully

我正在開發一個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:<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 ,您就無法確定它是否真的發送過電子郵件,或者是否已發送。

您可以使用DeliveryNotificationOptions來接收收據。

如果您有一個名為mail的MailMessage對象,請執行以下操作:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;

不是。電子郵件(基於SMPT)是一種不可靠的傳輸協議,雖然有一些黑客可以檢測到已經收到並閱讀了電子郵件,例如通過在電子郵件中嵌入個性化圖像URL並跟蹤圖像已經收件人的客戶要求,沒有絕對可靠的方式來滿足您的要求。

如果發送問題, SmtpClient.Send方法將引發異常。 但除了將該消息發送到SMTP服務器之外,沒有辦法知道它是否從那里到達目的地。

我正在使用gmail SMTP與我的程序發送郵件。 即使使用SmtpFailedRecipientException陷阱,發送的假郵件也會返回Ok。

但是,當我查看outlook我的Gmail收件人時,我發現郵件沒有發送解釋。 主題傳遞狀態通知(失敗)

我的問題是有可能在程序中獲得此通知。

我發現了這個,但它不適用於POP

當SMTP服務器收到新電子郵件時,通知C#客戶端

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM