2016-01-12 84 views
0

我們有許多通過我們的Office 365 Exchange帳戶發送電子郵件的C#(.net 4)應用程序。這在90%的時間內完全正常工作。但偶爾,我們得到以下錯誤:.NET應用程序中的Office 365 Exchange SMTP間歇性身份驗證失敗

The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM.

這裏是代碼:

private void SendEmail(string strTo, string strFrom, string strMessage, string strSubject, bool htmlFormat = true) 
    { 
     System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); 
     System.Net.Mail.MailAddress mto = new System.Net.Mail.MailAddress(strTo); 
     System.Net.Mail.MailAddress mfrom = new System.Net.Mail.MailAddress(strFrom); 
     mail.Subject = strSubject; 
     mail.From = mfrom; 
     mail.To.Add(mto); 
     mail.Body = strMessage; 
     mail.IsBodyHtml = htmlFormat; 
     System.Net.Mail.SmtpClient mailClient = new System.Net.Mail.SmtpClient("smtp.office365.com", 587); 
     mailClient.Timeout = 1000000; 
     mailClient.EnableSsl = true; 
     mailClient.UseDefaultCredentials = false; 
     mailClient.Credentials = new System.Net.NetworkCredential("[email protected]", "mypassword"); 
     mailClient.Send(mail); 
    } 

我已經看到了問題,提出有關此錯誤消息在這之前,但我還沒有找到任何解釋爲爲什麼它可能只是間歇性發生。該錯誤消息令人困惑,因爲我不想匿名發送,而且我已經在使用EnableSsl。 (注意:如果我刪除憑證行或EnableSSL行,那麼我每次都會收到此錯誤)

編輯:作爲測試,我做了一個簡單的應用程序,每分鐘發送一次電子郵件。在一次爆炸之前,我通常會收到12到25封成功的電子郵件。然後在再次爆炸之前,它會恢復正常12-25分。

編輯:由於問題是如此零星,並涉及從365 SMTP服務器返回的錯誤消息,我真的不認爲它與代碼本身的問題。鑑於此,我不確定我是否正確地標記了問題,或者SO是否是最好的社區。如果你們中的任何一位Stack Exchange的老手認爲這將會更好地置於不同的社區,那麼我就是耳熟能詳。我自己有點新。

任何想法感謝!

+0

我會發佈一個方法,您可以使用和或更改,我只是測試它 – MethodMan

+0

我也面臨這種間歇性的問題。我會說我們的郵件服務99%的時間工作,然後失敗,同樣的錯誤信息「SMTP服務器需要一個安全的連接或客戶端未驗證。服務器響應是:5.7.57 SMTP;客戶端未通過身份驗證發送MAIL FROM期間的匿名郵件「。 您是否找到解決這個老問題的方法? –

+0

還沒有。我有一個與微軟合作的案例。他們說其他人也在經歷間歇性問題。如果我們使用本地IIS中繼與365進行通信,則錯誤似乎消失。所以這是一個解決方法,但我不想爲每個應用程序使用中繼。我目前正致力於在我的.NET應用程序中捕獲SMTP日誌,以便爲MS提供更詳細的準確信息。 – Benjamin

回答

0

我用微軟365的支持打開了一個案例,他們告訴我我不是唯一遇到這個問題的人。他們讓我在發生問題時嘗試捕獲SMTP日誌,但我們從未發現任何非常有用的東西。 MS技術人員還表示,他將嘗試在後端的郵件服務器上升級某些東西(不確定究竟是什麼)。他這樣做後,問題仍然存在,但似乎不太頻繁。

最終它變得越來越不頻繁,現在我沒有看到它發生在大約5天。所以,我不知道這是來自我的MS科技所做的具體事情,或者只是一個更大的問題最終得到解決。但現在,問題似乎已消失,而不是通過改變我們的任何事情。

0
public static void SendEmail(string sTo, string subject, string body) 
{ 
    var Port = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]); 
    using (var client = new SmtpClient(Your EmailHost, Port)) 
    using (var message = new MailMessage() 
    { 
     From = new MailAddress(FromEmail), 
     Subject = subject, 
     Body = body 
    }) 
    { 
     message.To.Add(sTo); 
     client.DeliveryMethod = SmtpDeliveryMethod.Network; 
     client.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["EmailCredential"], 
       ConfigurationManager.AppSettings["EmailPassword"]); 
     client.EnableSsl = true; 
     client.Send(message); 
    }; 
} 
+0

感謝@MethodMan,看起來我們的代碼與包括'DeliveryMethod = SmtpDeliveryMethod.Network;'行在內的代碼差不多。我可以嘗試將它添加到我的,讓它運行一段時間,看看它是否有所作爲。由於這個問題非常間歇地發生,測試很棘手。 – Benjamin

+0

我們的代碼在創建郵件消息的方式上有點不同,我構建它的方式更加清潔。我希望這對您有用。目前我在所有的生產環境中都一直使用這個功能,但從未失敗過。'敲木'lol – MethodMan

+0

'DeliveryMethod = SmtpDeliveryMethod.Network;'是默認設置,它沒有任何設置。 – jstedfast