2012-05-03 43 views
0

長時間讀者,首次提問者。SmtpClient.Send(MailMessage)與大BCC列表超時 - C#

向110個BCC收件人發送電子郵件時收到超時。

我試圖從一個網站發送一個電子郵件發送到我的俱樂部,其網站我跑的成員。 我將自己添加爲發件人和收件人,並將成員的電子郵件地址保存在BCC列表中。大約有110個成員。我使用發件人的用戶名和密碼對服務器進行身份驗證。

我可以準備MAILMESSAGE就好了,但是當我打電話SmtpClient.Send()IT時代週刊出,即使有10分鐘的門檻。 收件人較少時,Send()方法仍需要很長時間(5-7分鐘),但成功完成。 即使沒有附件,也會發生這種情況,無論郵件或附件的大小如何。

我認爲,我的郵件服務器(我託管的Web服務器)以某種方式檢查,對外部系統的每個收件人的電子郵件地址,如垃圾郵件/黑名單或對每個收件人的郵件服務器。

我的託管公司難倒,他們發誓盲目的,它的一切OK。

你知道StmpClient MAILMESSAGE或一員,我可以設置要告訴郵件服務器不能做到這一點的?或者,也許(更好)像在Parallels HSPhere電子郵件服務器中設置的那樣停止此操作?

非常感謝提前。

示例代碼

bool SendEmail(string[] emailAddresses) 
{ 
    MailMessage message = new MailMessage(); 
    SmtpClient smtp = new SmtpClient("mail.myServer.org"); 
    message.From = new MailAddress("[email protected]", "Display name"); 
    message.To.Add("[email protected]"); 

    foreach (string recipient in emailAddresses) 
    { 
     // ABout 110 recipients 
     message.Bcc.Add(recipient); 
    } 

    message.Subject = "Whatever"; 
    message.ReplyTo = new MailAddress("[email protected]"); 
    smtp.Credentials = new NetworkCredential(message.From.Address, "whatever"); 

    try 
    { 
     message.Body = "A few hundred bytes"; 
     smtp.Timeout = 300000; // 10 mins 
     smtp.Send(message); 
    } 
    catch (Exception ex) 
    { 
     // Report here 
    } 

    return true; 
} 
+0

如果您使用標準的郵件客戶端(例如,ISP的網絡郵件客戶端)送了一堆BCC地址的消息,它需要一個同樣長的時間? –

+0

吉姆,我從來沒有注意到它是這樣做的,但我從來沒有送過那麼多。下次我發佈消息時,我將使用包含110項BCC列表的託管網絡郵件進行比較。很好的建議,謝謝。 –

+0

smtp.Timeout = 300000; // 10分鐘 它是5分鐘不是10。 –

回答

0

的決議對這個問題是DNS檢查。我的出站電子郵件服務器將收件人列表中的每個地址都帶走,並試圖在DNS中查找其域的MX記錄。
對於110個地址,有幾個得分不同的域,而這個查詢花了很長時間。 它完成了這個While-U-Wait,並且我的瀏覽器放棄了等待Web服務器或Web服務器放棄等待郵件服務器(現在不記得)。

我的供應商已禁用此選項。

在等待他們承認問題時,我通過以下方式解決了問題。我沒有給110個收件人發送一封電子郵件,而是在兩張表格中存儲了我想要發送的內容的詳細信息 - 一行爲正文,另一行爲收件人110行。然後,另一個ASP頁面對此表進行輪詢,每次選擇10個排隊的電子郵件,發送它們,並在幾秒鐘後打印HTML以自行刷新。在一個頁面中創建了我的行後,我點擊發送頁面,等待批量處理幾分鐘。總時間是相同的,可能更多,但小批量意味着沒有超時。

希望能幫助下一個人。