2011-05-05 61 views
7

我爲客戶建立了一個網站,他們想要一個自定義的通訊工具。構建該工具非常簡單,但我不確定如何發送電子郵件。你如何從ASP.NET發送大量電子郵件?

我建立了一個測試頁面,並管理使用System.Net.Mail命名空間來發送測試電子郵件給自己。我嘗試將這段代碼應用到新聞簡報頁面上的一個循環中,但這是一項相當艱鉅的任務。電子郵件發送循環會在發送電子郵件時鎖定整個站點大約一個小時。有時它會在中途中止循環,並且一些電子郵件不會被髮送。

我試着在另一個線程上啓動循環。

protected void btnSendNewsletter_Click(object sender, EventArgs e) 
{ 
    Thread t = new System.Threading.Thread(new ThreadStart(SendEmails)); 
    t.Start(); 
} 

但是,這仍然使網站變得緩慢,並且還有一箇中途退出的習慣。發送大量電子郵件的常用方法是什麼?我相信我沒有做對。

我是很新的.NET中的電子郵件領域,所以任何的幫助深表感謝。

+5

使用服務,而不是一個asp.net頁面,你使用的是什麼郵件服務器來發送電子郵件 – 2011-05-05 18:47:45

+0

? – 2011-05-05 18:48:43

+0

有點相關:http://stackoverflow.com/questions/3905734/how-to-send-100-000-emails-weekly/3905805#3905805 – Piskvor 2011-05-05 18:49:01

回答

6

對於這類任務,最好將一堆作業添加到隊列中。然後讓一個線程運行,從隊列中提取x個作業,處理它們(即發送電子郵件),然後休眠一段時間。這會給你的網絡應用程序一些喘息的空間。

如果你使用,你可以創建一個郵件隊列表來存儲作業的數據庫。我更喜歡在內存中使用這種類型的存儲器,因爲某些原因應用程序可能會回收,或者拋出異常......至少您可以從停止的地方繼續使用。

一般來說,運行工作線程的過程將不會是web應用程序本身。這將是一個Windows服務或類似的東西。如果你在共享主機上,這可能是不可能的。

+0

非常豐富和簡潔。謝謝。你是否知道你可以註冊的任何第三方API將負載轉儲到它們上並讓它們發送電子郵件? – Chev 2011-05-05 18:58:15

+0

同意。儘管Chevex不可能創建服務(共享主機),但您指定的這種方法仍然可以在主系統中使用。 – IAmTimCorey 2011-05-05 19:00:21

+0

我想最便宜的選擇是讓第三方處理電子郵件負載。我似乎無法找到一個好的羣發電子郵件API。是否有大多數人使用的流行的? – Chev 2011-05-05 19:04:30