可以實例化一次SMTP客戶端並同步發送2000封電子郵件嗎?發送2000封電子郵件
我們收到以下錯誤,實例化一個SMTP客戶端時爲每一封郵件我們發送郵件使用的代碼粘貼也是在這個崗位結束:
System.Net.Mail.SmtpException:服務不可用,傳輸通道關閉 。服務器的迴應是:4.4.1連接時間 出
我懷疑實例化每個消息的SMTP客戶端導致這一點,但不知道。代碼如下。
List<MailMessage> messages = GetMailMessages();
foreach(MailMessags m in messages)
{
try
{
SmtpClient client = new SmtpClient();//SHOULD THIS BE PLACED OUTSIDE AND BEFORE THE LOOP
client.Send(m);
}
catch (Exception)
{
throw;
}
}
編輯1:
我剛剛發現這個MSDN上。 (http://msdn.microsoft.com/en-us/library/ee706942%28v=vs.110%29.aspx)。 因此,當使用大量電子郵件發送時,您似乎只能實例化SMTP客戶端一次,並將其重用於所有多個MailMessage。
由SmtpClient 類到SMTP服務器的當前實例建立可以是 的連接重新使用,如果應用程序希望多個消息發送到同一個SMTP服務器。這是
當使用身份驗證或加密建立與SMTP 服務器的連接時特別有用。驗證和建立TLS會話的過程可能是昂貴的操作。 A 要求在發送大量電子郵件到 時爲每條消息重新建立連接,同一個SMTP服務器可能會對性能產生重大影響。有多個 大容量電子郵件應用程序發送電子郵件狀態更新,新聞稿分發或電子郵件 警報。
是的,絕對實例化循環外的客戶端,併爲每個郵件重新使用它。在消息之間休息幾秒鐘可能會很好。 – HaukurHaf
使用單個'SmtpClient'來處理所有消息,並在完成時調用'Dispose()'(使用'using'語句)。 –
你可以嘗試在發送後使用SmtpClient - '使用(var client = new SmtpClient()){client.Send(m); }' – Win