2009-06-29 105 views
3

我在C#中的郵件應用程序中工作,基本上,我需要能夠確定哪些收件人成功收到郵件,哪些收件人沒有,無論是什麼失敗原因。確定是否可以成功發送電子郵件

總之,例如,我需要在電子郵件地址不存在時拋出異常。但是,在這種情況下,SmtpClient.Send不會引發異常,因此我需要監視傳遞失敗答覆並解析它們,也許。

我知道這不是一個簡單的任務,所以我會問你的專家如何處理與電子郵件發送的主要問題的一些技巧。

在此先感謝!

回答

5

除非您使用哈希跟蹤的圖像或類似圖像,否則出於安全原因,我認爲您無法進行此操作。許多郵件客戶端也不會自動下載圖片。

想象一下,如果垃圾郵件發送者能夠可靠地確定他們收到了哪些電子郵件?

你可以嘗試ping服務器...即gmail.com,但我不知道這將是多麼可靠。

+0

這真的是唯一的方法來做到這一點(與圖像)。構建電子郵件,以便在圖像未加載時真的很難閱讀。討厭接受者,但是如果你真的需要,就完成工作。 – colithium 2009-06-29 04:13:33

4

您無法可靠地檢測到這種情況。這是SMTP協議的本質。完全取決於收件人SMTP服務器選擇告訴您電子郵件是否已發送。

0

您的具體要求根本無法以高性能的方式實施。即使您要使用退回電子郵件來確定電子郵件是否已成功發送,反彈通常不會立即發生,並且有時可能需要幾個小時,這意味着您不應該嘗試同步執行此操作(即,如果沒有收到電子郵件,期望發送電子郵件的方法會拋出異常)。

根據你想要做什麼,你可以通過異步操作來滿足你的要求。例如,我與一個有郵件列表應用程序的客戶合作,如果電子郵件被反彈,他們不需要立即處理它。他們甚至不需要可靠地知道這一點(例如,如果沒有收到電子郵件,但它不彈跳,他們不在乎)。他們只需要知道電子郵件無效,並取消訂閱。

此應用程序使用LISTSERV。發送的電子郵件具有自定義的唯一返回路徑標題。在收到特定收件人的N次退件後,電子郵件會自動取消訂閱,並且與收件人關聯的任何數據庫記錄也會被清理。

我不確定是否有一個簡單的方法來實現這個沒有LISTSERV,但你可能想看看smtp2web

相關問題