2011-08-17 464 views
12

下面是我的編碼,只需看看它如何確認郵件是否已發送?

System.Net.Mail.MailMessage oMail = new System.Net.Mail.MailMessage(); 
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(); 
oMail.From = new System.Net.Mail.MailAddress("[email protected]"); 
oMail.To.Add(TextBox1.Text.Trim()); 
oMail.Subject = "Subject*"; 
oMail.Body = "Body*"; 
oMail.IsBodyHtml = true; 
smtp.Host = "smtp.sendgrid.net"; 
System.Net.NetworkCredential cred = new System.Net.NetworkCredential("myusername", "mypassword"); 
smtp.UseDefaultCredentials = false; 
smtp.Credentials = cred; 
smtp.Send(oMail); 

在這裏,我需要檢查郵件是否已交付與否。

+0

那麼你需要一個電子郵件中的鏈接,收件人點擊回到URL或網絡服務,以確保 –

+0

你是什麼意思交付?將郵件發送給主持人或確認接收者閱讀郵件? –

回答

19

你不能。由於您使用SMTP,通常情況下,無法確定傳遞是否成功。閱讀SMTP規範。郵件在發送時會被路由,因此:

  1. 無法保證一旦您致電smtp.Send()即發送郵件。
  2. 由於SMTP是路由,您不能確定路由上的某個節點不會因傳遞到上行鏈路而失敗。
0

如果您沒有在您的代碼或SMTP服務器上收到任何例外情況,則可以認爲它已交付。這是電子郵件的問題,無法保證交付。

+0

顯然不正確! SMTP不是保證交付。正如任何人都知道幾周後收到不可交付的票... –

+0

但是,如果有任何emailid反彈它不顯示任何異常..我已經檢查了很多次...有什麼辦法可以得到反彈mailerID –

+0

不是來自這個代碼,沒有。 –

8

您可以將MailMessageDeliveryNotificationOptions屬性設置爲OnSuccess

有這個位置的詳細信息:http://msdn.microsoft.com/en-us/library/system.net.mail.deliverynotificationoptions.aspx

在這裏:正如已經指出了意見http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.deliverynotificationoptions.aspx

,這種方法並不是100%可靠。這只是一個選擇。

+4

這不是100%可靠。 – agibalov

+2

比其他兩個答覆更可靠,它絕對沒有什麼... – Blindy

+0

Blindy:不正確。 –

0

如果您有權訪問包含SMTP日誌的服務器,具體取決於所用服務器的類型和使用的詳細程度,您可能能夠更好地瞭解交付的實際成功。

例如,如果您使用的是SmarterMail,您可以編寫一個簡單的解析器來讀取smtp日誌並報告給您的應用程序。不是說這不應該是阻止操作,就好像您的電子郵件是灰名單,它可能需要很多分鐘才能交付。

另一種選擇是創建一個所有「noreply」電子郵件地址的捕獲,併發送您的電子郵件與發件人中包含的電子郵件ID,即[email protected]並使用pop3閱讀器來檢查返回電子郵件的收件箱。使用「發件人」中的電子郵件ID可以計算出哪些電子郵件未能發送。你也可以做一些過濾來確定它是否「無法提供」或者僅僅是「不在辦公室」類型的回覆。

很多可用的選項,只取決於你想投入多少汗水。

1

下面是保證電子郵件產能的最佳做法:

  • 建立一個沒有回覆地址作爲一個實際的收件箱中,然後使用POP3進入 的電子郵件帳戶,並尋找反彈的消息。
  • 驗證的電子郵件地址是有效的,你使用的東西 這樣的電子郵件驗證庫發送前:

http://www.kellermansoftware.com/p-37-net-email-validation.aspx

1

如果有人越過絆倒。這是我在使用Exchange的舊版Win 2003服務器上的體驗。我的.Net應用程序使用SMTP發送電子郵件,並使用組地址作爲「發件人」,因此任何回覆都會發送到整個組。這是一項調度操作,我們希望小組中的任何人協助回覆。我們預計任何未送達通知將發送給該​​組。它不會發生。我甚至進入了郵件追蹤,看到Exchange表示它已將通知發送給該組,但他們從未得到它。接下來,我進入了SMTP虛擬服務器屬性,並在「發送未送達報告副本到:」中輸入了組電子郵件地址。同樣的結果,消息跟蹤表示它將它發送給組,但它從未交付。顯然,未送達通知只會發送給個人而不是羣組的電子郵件地址。我將其更改爲個人地址並且可以正常工作。

相關問題