2011-04-25 121 views
0

我們正在尋求解決的電子郵件存在一些問題。用於排隊,審閱和攔截電子郵件的電子郵件解決方案?

  • 如果SMTP服務器已關閉,我們希望我們的批處理作業排隊的電子郵件,他們創造地方所以我們不必重新運行工作。什麼是一個好的排隊系統,以及如何將隊列中的電子郵件提供給SMTP服務器?
  • 默認情況下,在調試時,我們不希望發送電子郵件。我們遇到了一些情況,當開發人員無意中通過代碼發送電子郵件給用戶時。我們如何防止再次發生這種情況?
  • 偶爾,開發人員可能需要手動運行批處理作業,方法是附加一個調試器,並逐步執行指向生產數據的代碼。在這種情況下,我們希望能夠在實際發送之前查看批量作業發送的任何電子郵件。在發送的所有電子郵件中是否有一種簡單的方法來識別這些電子郵件,然後暫停發送電子郵件足夠長的時間來檢查它?

我們所有發送電子郵件的代碼都通過SendEmail()函數。這可以被重構以使電子郵件在某個地方排隊。我們願意查看不同的SMTP服務器,構建自定義解決方案或其他內容。

你可以給些什麼建議?是否有一種解決方案可以解決這些問題或一組解決方案?謝謝。

回答

0

我們解決了SMTP服務器問題的unavailablity通過使用一個try/catch - 如果標準SMTP服務器不可用,我們通過寫入SMTP拾取目錄使用IIS提供的SMTP服務,如下所示:

http://systemnetmail.com/faq/4.7.aspx

它做你要找的東西 - 在電子郵件寫入隊列,將可能的情況下發送。

寫電子郵件到IIS服務器的SMTP 服務拾取目錄是System.Net.Mail的另一 新功能。 SMTP提取目錄是Microsoft的SMTP 服務用於發送電子郵件的特殊目錄 。在該目錄中找到的任何電子郵件文件 都將被處理 並通過SMTP傳遞。如果 交付過程失敗,則在另一次存儲在 交付的隊列目錄中的文件爲 。如果發生致命的 錯誤(例如DNS解析 錯誤),則文件將被移至 死信目錄。

這意味着,當然,確保SMTP服務安裝在有問題的Web服務器上。

這比我們打算放下的路線要簡單得多,這意味着要在某處(文件系統,數據庫等)編寫序列化的電子郵件,然後設置服務以嘗試按計劃發送它們。自從我們實施這個以來,我們一直沒有任何問題。這不是一個保證,但我只是說,它對我們非常好。

0

如果要防止運行調試版本時發送電子郵件,你可以寫:

void SendEmail() 
{ 
#if DEBUG 
    // do nothing 
#else 
    // do normal send 
#endif 
} 

如果你想要的東西,將在可能的SMTP中斷面對工作,你需要他們排隊到一個文件,並有一個單獨的進程讀取該文件,並根據需要發送的電子郵件中,重試。

如果你想查看發送之前一些電子郵件,有批處理文件啓動一個命令行開關程序。當SendEmail方法存儲在文件中的電子郵件,都寫的是價值。發送該處理/重試將不發送具有附加該標誌的任何消息。相反,它把那些到另一個等候審查。

相關問題