CODE: -與任務並行庫發送郵件拋出錯誤
List<Task> tasks = new List<Task>();
foreach (var item in arr)//arr contains 1000+ mailids
{
tasks.Add(Task.Factory.StartNew(() =>
{
using (MailMessage msg = new MailMessage())
{
msg=getmsg();//p-shadow code no erorr here
SmtpClient smtp = new SmtpClient();
smtp.Host = smtpServer;
smtp.Port = smtpPort;
smtp.EnableSsl = isSmtpSsl != 0 ? true : false;
smtp.Credentials = new NetworkCredential(smtpUName,smtpPass);
smtp.Timeout = int.MaxValue;
smtp.Send(msg);//---throws error....
//sql code to insert db that mail is send
}
}, TaskCreationOptions.LongRunning));
}
Task.WaitAll(tasks.ToArray<Task>());
ERROR- 「發送郵件失敗。」
INTERNAL ERROR-「無法從傳輸連接讀取數據:net_io_connectionclosed。」
難道你打開太多的連接到SMTP服務器,或者打它太快,它的節流嗎?如果每秒鐘執行一次或每五秒執行一次,會發生什麼情況? – 2013-03-27 15:32:13
我不認爲SmtpClient(或服務器)同時支持到同一臺服務器的多個連接。想想你要做的事情:你要求多個'SmtpClient'對象連接到* same *服務器併發送電子郵件。 'SmtpClient'將重新使用連接到同一臺服務器,所以你可能處於競爭狀態。您是否嘗試過使用'SendAsync'而不是使用'Task'? – 2013-03-27 15:56:33
至少,我希望你會想要使用一個'SmtpClient'對象 – 2013-03-27 15:57:26