2010-09-20 46 views
0

我們向所有已註冊此服務的用戶發送免費通訊。由於這些通訊免費發送,我們預計一個月內至少有5000個用戶。我擔心使用SMTP服務器概念的批量郵件是否會導致一些問題。首先,我們想到開發一種Windows服務,它會自動定期向訂戶發送郵件,但業務用戶已經要求通訊應由管理員編輯,然後只發郵件給用戶,因此我們必須在網站本身開發此功能! 。我在數據表中獲取特定用戶的訂戶,然後郵寄給每個用戶進行循環,這是否會導致任何性能問題? 代碼粘貼如下:在ASP.Net中使用SMTP服務器進行批量郵寄

dsEmailds.Tables [0]有通訊訂閱者列表。

for (iCnt = 0; iCnt < dsEmailIds.Tables[0].Rows.Count; iCnt++) 
{ 
    MailMessage msg = new MailMessage(); 
    msg.From = new MailAddress("[email protected]", "test1"); 
    msg.To.Add(dsEmailIds.Tables[0].Rows[iCnt]["mailid"]); 
    msg.IsBodyHtml = true; 
    msg.Subject = subject; 
    AlternateView av1 = AlternateView.CreateAlternateViewFromString(MailMsg, null, System.Net.Mime.MediaTypeNames.Text.Html); 
     av1.LinkedResources.Add(lnkResLogo); 
     av1.LinkedResources.Add(lnkResSalesProperty); 
     av1.LinkedResources.Add(lnkResLeaseProperty); 
     msg.AlternateViews.Add(av1); 

SmtpClient objSMTPClient = new SmtpClient(System.Configuration.ConfigurationManager.AppSettings["mailserver"].ToString()); 
objSMTPClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
objSMTPClient.Send(msg); 
}   

任何建議將是偉大的!

回答

1

我看到的主要問題是您可能會遇到頁面超時。在我看來,最好的辦法是建立一個服務,通過從隊列中讀取來處理與郵件相關的用途(例如模板)。您的網站可以發佈您希望發送到隊列中的郵件,然後提供基本管理面板來管理服務並獲取一些統計信息。

您可以使用開源& XCOPY友好的系統,像犀牛隊列,或ServiceBus隊列,併爲Topshelf服務,如果你想輕鬆設置

但我建議你不要發送大量電子郵件中網頁

4

你應該STOP,並考慮所有種類的事情:

  • 黑名單:與您肯定會在嚴重的ISP /郵件服務器上列出數量,並且您需要證明收到的用戶要求提供此類電子郵件並等待1到3個月的過程,同時刪除該標記

  • 您需要發送電子郵件以塊,不超過250每次使用不同IP的機器發送更多的電子郵件(多塊)

請閱讀一些不錯的準則做這一切,你可以在MailChimp找到它, Campaign Monitor

Free Email Marketing Guides

您應該使用服務,如Mailchimp(現在是免費的到1000個訂閱,3000發送一個月),但價格very cheap他們有一個API,你可以輕鬆地添加,創建,發送你會得到關於如何打開所有這些漂亮的報告,他們做了什麼,等等

的Campaign Monitor是夢幻般的爲好,但有點more expensive但偉大的,因爲你可以通過品牌的整個UI和銷售作爲服務給你的客戶(如果你在想在不久的將來做這樣的事情)。

我希望它有幫助。

給他們一個嘗試,我是一個快樂的客戶。

+1

+1使用外部服務。還有更多的發送通訊比發送SMTP – Radu094 2010-09-20 10:41:16

+0

,他們都得到塊發送郵件,檢查黑名單,油門發送等......我們可以做我們最擅長的事情,而不是想和花時間:)愛他們! – balexandre 2010-09-20 10:42:54

0

有一個SendAsync方法將實際排隊這些請求,並從你的線程發送異步。這樣你可以防止超時,你可能會在幾秒鐘內發送(即隊列)5000封電子郵件。

+0

「很可能發送」,如果在這麼短的時間內只使用1個IP發送這麼多,大多數都是黑名單! – balexandre 2010-09-20 11:35:46

0
  • 寫入機器上運行的SMTP服務器(IIS包含一個)的代答隊列。這是最快和最有效的方法。

OR

  • 設置代碼中的自定義線程池和卸載任務吧。這樣,來自ASP.NET線程池的工作線程就可以爲傳入的請求提供服務,並且不會被髮送郵件佔用(這取決於您的服務器負載有多高,當然 - 使用異步方法繼續處理ASP.NET線程池如果你不關心負載/負擔得起)。