2012-05-04 40 views
2

我已經編寫了一個控制檯應用程序,用於讀取表中的郵件隊列並將它們作爲電子郵件發送給多個收件人。一個典型的使用場景是一次發送2000封電子郵件,每封郵件都有不同的郵件地址(郵件合併名稱,地址等)使用.NET 4 SmtpClient在一個批處理中發送多個電子郵件(發送vs SendAsync)

該應用程序的工作原理和似乎處理2000封郵件一分半鐘。我使用的方法是非常簡單的(我已經取出來在try..catch塊簡潔):

using (var mailBot = new SmtpClient()) 
{ 
    foreach (var mail in dataContext.Mails 
             .Where(item => !item.IsSent) 
             .OrderBy(item => item.MailId) 
             .ToList()) 
    { 
     mailBot.Send(new MailMessage(mail.MailFrom, mail.MailTo, mail.Subject, mail.Message)); 
     mail.IsSent = true; 
     dataContext.SaveChanges(); 
    } 
} 

現在,我的問題是,我怎麼能加快這個應用程序的操作?我覺得通過使用SmtpClient.SendAsync()可以改進這種串行方法,但是我擔心我無法控制將創建多少個線程,並且仍然需要應用程序來留待發送結果,因爲我需要標記郵件是否已成功發送。另外,我認爲接收SMTP服務器只能處理一定數量的併發請求。

那麼我在想自己多思考一個多線程解決方案可以加快郵件傳遞並允許應用程序更早退出?

+0

以下是gmail如何處理批量發件人的指導:http://support.google.com/mail/bin/answer.py?hl = zh-CN&answer = 81126 – Sharun

+0

請注意,拒絕電子郵件的風險很高反垃圾郵件過濾器。如果兩個以上的電子郵件地址在同一個郵件服務器上,它可以拒絕它們爲垃圾郵件。 – i486

回答