2015-07-20 62 views
2

我正在使用本地主機通過SES發送批量郵件。這個問題有很多人回答,但沒有一個解決方案對我有幫助。問題是我可以一次發送100/150封郵件,之後出現上述錯誤。我試圖按照某些人的建議處理客戶端,但不工作。我正在使用C#代碼來執行此操作。任何答案/建議非常感謝。以下是我用於使用for循環發送批量郵件的代碼。您可能認爲這可能是一個限制性問題,這不是因爲我們每天有70封電子郵件和500000封電子郵件。關閉傳輸錯誤。超時等待來自客戶端的數據

Parallel.For(0, mail.Count, i => 
{ 
    // Replace with your "From" address. This address must be verified. 
    String TO = mail; // Replace with a "To" address. If your account is still in the 
    // sandbox, this address must be verified. 

    // Create an SMTP client with the specified host name and port. 
    using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(HOST, PORT)) 
    { 
     // Create a network credential with your SMTP user name and password. 
     client.Credentials = new System.Net.NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD); 

     //Use SSL when accessing Amazon SES. The SMTP session will begin on an unencrypted connection, and then 
     //the client will issue a STARTTLS command to upgrade to an encrypted connection using SSL. 
     client.EnableSsl = true; 
     System.Net.Mail.MailMessage message1 = new System.Net.Mail.MailMessage(FROM, TO, SUBJECT, BODY); 

     message1.IsBodyHtml = true; 
     client.Send(message1); 
     client.Dispose(); 
    } 
}); 
+0

本地計算機具有有限的資源(CPU,互聯網帶寬和內存,僅舉幾例)。如果您同時發送超過100條消息*,則可能沒有足夠的一個或多個資源可用於以足夠及時的方式可靠地*服務*所有這些單獨的TCP連接和SMTP會話,以防止其中一些超時。你有沒有考慮過?如果你從開始到結束對每個smtp會話進行基準測試,我預計你會超過一定的門檻,之後事情開始「意外」減慢。 –

+0

我的本地機器有4 GB RAM和16Mbps網速。這個配置不足以正確運行應用程序嗎? – user3790666

+0

根據原始數字來回答這個問題是不可能的。請考慮對您的代碼進行基準測試,以更好地瞭解您的問題的性質。 –

回答

0

我不知道它爲什麼現在工作的確切原因,但它的工作。我改變了上面的代碼的邏輯,它開始工作。我不是每次都要發送SMTP連接,以前發送每封郵件,這次我只提取了一次smtp連接,並用它一次發送所有批量郵件,並開始工作。但問題是發送時間,它是發送所有郵件太多。反正我會找到解決方案。

using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(HOST, PORT)) 
{ 
    client.Credentials = new System.Net.NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD); 
    client.EnableSsl = true; 
    for(i=0;i<mail.Count;i++) 
    { 
     String TO = mail[i]; 
     System.Net.Mail.MailMessage message1 = new System.Net.Mail.MailMessage(FROM, TO, SUBJECT, BODY); 

     message1.IsBodyHtml = true; 

     client.DeliveryMethod = SmtpDeliveryMethod.Network; 
     client.Send(message1); 
    } 

    client.Dispose(); 
} 

Label1.Text = mail.Count.ToString() + " mails sent !!"; 
相關問題