2010-06-28 31 views
7

我必須編寫應用程序發送通訊。 什麼是發送電子報用戶的最佳方式? 我的要求是在asp.net發送時事通訊約10000封電子郵件

  1. 每封郵件是seprately如要:
  2. 每個郵件具有獨特的退訂鏈接

是很好用的SMTP郵件類.NET的? 我看起來可能會有問題,但不能決定我應該去哪個地方? 有各自之間的許多建議

  1. 多線程Windows服務
  2. 使用郵件服務器
  3. 添加了Thread.Sleep(2000)發送。

任何人都可以提出很好的方法來詮釋這個嗎?

回答

8

我不會推薦asp.net網頁發送,即使您是在單獨的後臺線程中啓動它。我認爲你會冒着服務器在發送過程中回收你的過程的風險,這會弄亂它。你真的需要編寫某種單獨的服務或應用程序來發送你的電子郵件。

最簡單的選擇只是創建一個快速和骯髒的控制檯或Windows窗體應用程序。

另外日誌記錄就像其他海報所說的那樣至關重要。如果失敗,你想確切地知道發送的內容和停止的地方,這樣當你重新啓動它時,你不會再郵寄所有那些再次工作的人。你希望能夠輸入發送的起始點,所以如果你需要在#5000號郵箱重新啓動,你可以。

System.Net.Mail命名空間中的類可以很好地發送郵件。

最大的問題之一將是找到一個電子郵件主機,它可以讓你發送這麼多的電子郵件。大多數電子郵件主機具有節流功能,並且有時它會根據服務器條件而變化,所以如果服務器被大量使用,那麼電子郵件限制將會受到更多限制,並且您每小時只能設置500封電子郵件。

我們有一份新聞稿,作爲單獨的電子郵件發送給大約20000人,我們不得不玩弄電子郵件之間的延遲,直到找到可用於我們電子郵件主持人的郵件爲止。我們在電子郵件之間以1.2秒結束,所以這可能是一個很好的起點。

我認爲電子郵件主機專門用於批量郵件,所以如果你得到其中一個可能不是問題。

另外,如果您主持自己的電子郵件,這可能不成問題。而且,如果您主持自己的郵件,則可以選擇將郵件放在提貨目錄中,然後您可以儘快將其全部轉儲到那裏,然後讓電子郵件服務按照自己的步調進行提取。

編輯:這裏是設置添加到配置文件設置拾取目錄

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]" deliveryMethod="SpecifiedPickupDirectory" > 
      <specifiedPickupDirectory pickupDirectoryLocation="Z:\Path\To\Pickup"/> 
     </smtp> 
    </mailSettings> 
</system.net> 
+0

hi cris, 感謝您的回答。 我們有我們自己的兌換服務器。 我想知道如何刪除皮卡目錄中的郵件? – 2010-06-29 09:02:20

+0

在配置文件的mailsettings元素中,您可以更改傳送方法。你也可以通過編程來完成。 http://msdn.microsoft.com/en-us/library/ms164240.aspx – 2010-06-29 13:20:49

+0

謝謝克里爾 我會給它嘗試 – 2010-06-29 15:41:52

1

我寫過發送電子郵件的頁面,但幾乎不會達到您的音量。不過,我會建議基於代碼我已經在過去執行以下操作:

  • 使用Web應用程序寫出來的郵件,所有的收件人地址到數據庫表(或多個)。

  • 有一個超出ASP.NET實際發送電子郵件的進程。這可能是一個作爲計劃任務設置的vbs文件,或者(最好)是一個windows服務。該過程將採用電子郵件的文本,附加取消訂閱鏈接,並且一旦發送成功,標記發送的數據庫記錄。這樣,如果發送失敗,它可以稍後再試一次(發送過程在標記爲未發送的所有記錄上循環)。

  • 如果您需要發送內容和時間的日誌,您只需將發送的記錄保留在數據庫表中。否則,只需刪除一次發送成功的記錄。

恕我直言,ASP.NET工作進程中發送電子郵件是一個壞主意,因爲你不知道需要多長時間,如果發送失敗幾乎沒有機會的頁面超時前重試。

2

絕對不要在ASP.NET做到這一點。這是新Web開發人員犯下的最大錯誤之一。

這需要是一個Windows應用程序或服務,可以處理這麼多的量。

1

創建一個網頁來「設計」新聞簡報。當他們點擊發送時,將新聞簡報放在某個地方(數據庫)並使用另一個程序(Windows服務等)發送排隊的信件。如果設計正確,這將更加有效並且具有潛在的容錯能力。

1

我已經在ASPNET MVC 2實體框架和使用System.Net.Mail命名空間中編寫了一個時事通訊模塊(作爲更大系統的一部分)。它在視圖中被啓動,實際上只是在控制器中運行,並有一個支持方法來執行發送。每發送一封電子郵件,我都會跟蹤是否存在困難(引發異常),並更新該數據庫記錄,指出異常失敗,否則我會更新記錄,說明成功。我們也做個性化,所以我們有'標籤'被數據庫中的額外字段取代(存儲爲XML以提高靈活性)。這有助於處理取消訂閱功能。我的代碼非常簡單(請不要讓我用異常處理作爲業務邏輯;),它就像一個魅力。

這是所有在VPS上完成的http://maximumasp.com,其中還承載4個網站與相當不錯的流量。我們使用他們的SMTP服務器。我們通知他們我們需要這項服務,並且在關係方面沒有任何問題。

我們在運行Windows 2008的機器上安裝了2GB的RAM,並且每秒處理6封電子郵件。當網站需要它時,我們將它撞到了3GB,現在郵寄出去的速度大約是20郵件/秒。我們的郵寄地址範圍從2,000到100,000個電子郵件地址。

簡而言之,ASP.NET可以用來處理郵件輸出,並且如果你添加了一些邏輯來處理記錄更新,那麼中間發送失敗的擔心就會減輕。是的,可能有更多的方法來做到這一點。我們正在尋找MQMS和線程,並將其與windows服務分開,以使它更穩定和可擴展,因爲我們放置了更多的客戶端和更大的列表,但現在它工作得很好,具有合理的報告和錯誤處理。

+0

僅供參考我們把RAM再次提高到4GB(得愛虛擬環境),現在正在泵出35emails /秒。它變成一個非常穩定的設置。您可以瀏覽該頁面,稍後再回來查看報告。我們已經在一些簡單的電子郵件通知中添加了某些百分比的發送已完成。我們有計劃添加更復雜的排隊,但它正在處理負載,沒有任何打嗝。不要害怕使用.NET Web服務器來管理大量郵件! – 2010-11-03 04:22:51