簡體   English   中英

使用ASP.NET發送電子郵件

[英]Sending emails with ASP.NET

我正在建立一個網站,客戶希望在其上建立新聞通訊“系統”。 如何發送這種批量(> 1000)電子郵件?

我在某處讀到,使用smtpclient的sendasync方法可以解決問題。 但是它不斷給我一個“電子郵件失敗”例外。 而且,我不知道該怎么辦...

因此,基本上我的問題是,可以使用smtpclient的SEND方法發送電子郵件,但是每個郵件都是它自己的線程。

例如

   NewsletterEmail newsletterEmail = new NewsletterEmail(emailAdress[i], mailSubject, mailBody);
    Thread t = new Thread(new ThreadStart(newsletterEmail.MakeAndSendEmail));
    t.IsBackground = true;
    t.Start();

我認為,您應該重新考慮發送大量電子郵件的方法

創建> 1000個線程不是一個好主意,它甚至可能使服務器崩潰或使服務器響應速度非常慢。

向您的客戶介紹“ 持續聯系” 他們將比您以往更好地處理此問題。 它也比您的時間便宜。

萬一失敗,您有兩種選擇。

如果他們已經有電子郵件服務器,則可以利用該服務器進行電子郵件廣播。 換句話說,通過該服務器中繼郵件。

如果您不能這樣做,請下載免費的電子郵件服務器。 我一直在使用hMailserver 設置並中繼。

如果不能這樣做,請編寫自己的SMTP處理引擎。 不要嘗試直接從ASP.Net發送電子郵件。 將它們排隊在數據庫中,並編寫Windows服務來處理郵件廣播。

有時每封電子郵件發送電子郵件可能要花費幾秒鍾。 當它試圖處理發送1000封電子郵件時,這可能會使您的網站完全癱瘓。

許多郵件服務器配置有灰色列表,這意味着它們要求您發送兩次相同的電子郵件,以證明您不是垃圾郵件發送者。

接下來,正確設置DNS可以成為PITA。 這就是為什么我建議經常聯系 我有一個花了將近5年時間來最終配置其DNS的客戶端。 是的,我每年都會給他們一次明確的指示,告訴他們該怎么做。 反向DNS至關重要。

另一件事是,某些收件人服務器會限制一次接收的線程數量。 大多數郵件服務器的構建都考慮到了這一點。 如果您越過邊界,則收件人服務器將認為您是垃圾郵件發送者,並采取適當的措施。

另一個問題是反復發送到錯誤的地址。 AOL和其他人會因為這件事而將您視為垃圾郵件發送者。

重點是,您真的不想自己寫這個。

最好的選擇是讓電子郵件發送一個單獨的過程。 它可以按計划運行,以檢查是否需要發送電子郵件(也許將電子郵件存儲在表格中?),或者,如果您不喜歡預定的流程想法,則可以啟動一個控制台應用程序通過您的網站。

還有一點要記住的是,如果您在短時間內發送太多電子郵件,將其列入黑名單非常容易,那么來自您域的電子郵件將不會被發送到任何將您黑名單的服務器上列出。

我采取了兩種方法:

1)懶惰,草率的方法來配置asp.net進程超時足夠長的時間來通過發送

2)創建一個由Web應用程序生成的控制台應用程序。

我在一兩年前建立了一個類似的系統。 以編程方式發送電子郵件時,有很多事情可能出錯。 因此,請幫自己一個忙,將消息與發送過程分開。 這樣,您可以“教導”系統應該忽略“ badEmail@goodDomian.com”或其他類似情況。

您可以將消息,主題或所需的任何數據分離級別存儲在數據庫中,並帶有元數據標志,例如“ SentOn”,“ FailedOn”等。我一次發送一條消息以允許要存儲和/或處理的單個錯誤。 我使用了SmtpMail.Send() ,但是只要您構建了可恢復的智能內容,您選擇的任何方法都應該起作用。

看看MailChimp API: http//www.mailchimp.com/api/gettingstarted/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM