2011-11-21 39 views
3

我正在更新一些舊代碼以便與SQL集成。我爲一家偶爾發送大量電子郵件的公司工作,這些郵件極大地降低了郵件服務器的速度。如果電子郵件開始建立,我們希望將這些電子郵件排入數據庫。在測試代​​碼的某些更改時,我注意到我會收到電子郵件,客戶端仍然會超時。這會造成問題,因爲客戶端會將該電子郵件設置在隊列中,並且稍後當另一個服務嘗試清除數據庫時我會收到它。SmtpClient.Send將發送消息並超時

SmtpClient emailClient = new SmtpClient(Settings.SmtpServer); 
emailClient.Timeout = 100; 

bool sent = false; 
try 
{ 
    using (Impersonate imp = DA.GetImpersonator()) 
    { 
     emailClient.Send(message); 
     sent = true; 
    } 
} 
catch (SmtpException) { } 
finally 
{ 
    if (sent) 
    { 
     email.IsSent = true; 
     DA.Save(email); 
    } 
} 

10個測試運行中,9個超時,1個成功;我收到7封電子郵件。

+2

這取決於服務器的行爲。 – SLaks

回答

4

從查看規範,超時只承諾該方法將在該時間內返回,而不是發送已停止。

如果您需要發送多封電子郵件,請考慮使用SendAsync method並訂閱SendCompleted event以確定發送電子郵件的成功/失敗。