簡體   English   中英

使用ASP.NET發送電子郵件的臨時問題

[英]Temporary problems sending emails with ASP.NET

我討厭在這里發布一個堆棧跟蹤,但我沒有想法......我的應用程序在網站上發送各種任務的電子郵件,90%的時間都沒有問題。 但是,ASP.NET經常會拋出一個奇怪的異常,這似乎與郵件服務器連接有關(我使用谷歌業務服務器來處理電子郵件)。 這個錯誤對我來說太通用了,所以下面的堆棧跟蹤。 我的應用程序捕獲異常並回寫一個通用的“在5分鍾響應中再試一次”。

我被這個錯誤困擾了,因為:

  • 谷歌電子郵件通常非常可靠(它是從我的域發送的,而不是gmail.com)。
  • 卷非常低,所以這不應該是加載/垃圾郵件類型的問題。
  • 錯誤非常通用。
  • 在5分鍾內再次嘗試幾乎總是允許發送電子郵件沒有問題,沒有任何參數(收件人,主題,正文)發生了變化。

有任何想法嗎? 我能想到的唯一突出問題是:

  1. 電子郵件發送是同步的 這就是我實際想要發生的事情,因為我想用成功/失敗狀態消息來響應用戶。
  2. 我正在使用Amazon EC2作為服務器,如果這與此事有任何關系。

代碼:

    public static void SendMail(String from, String to, String subject, String body, bool IsHtml)
    {
        MailMessage m = new MailMessage(from, to, subject, body);
        m.IsBodyHtml = IsHtml;

        SmtpClient smtpClient = new SmtpClient();
        smtpClient.EnableSsl = true;
        smtpClient.Send(m);
    }

例外:

System.Net.Mail.SmtpException: Error in processing. The server response was: 4.3.0 Mail server temporarily rejected message. m6sm2190005vcx.24
at System.Net.Mail.DataStopCommand.CheckResponse(SmtpStatusCode statusCode, String serverResponse)
at System.Net.Mail.DataStopCommand.Send(SmtpConnection conn)
at System.Net.Mail.SmtpConnection.OnClose(Object sender, EventArgs args)
at System.Net.ClosableStream.Close()
at System.Net.Mail.MailWriter.Close()
at System.Net.Mail.SmtpClient.Send(MailMessage message)

我過去曾在批量電子郵件系統上工作過。 您獲得的異常消息完全是描述性的:SMTP服務器暫時不接受郵件。 這可能是由於許多條件:

  1. 服務器很忙
  2. 您發送太多電子郵件太快(這可能會讓您看起來像垃圾郵件發送者)
  3. 一般錯誤

以后重試電子郵件始終有效的事實表明這是正常的預期行為。 沒有什么可以做的不同以避免這種情況,它是ISP用於在需要時限制流量的常用方法。

除了Dave Swersky已經說過的內容之外:你可以存儲你想要發送到某個地方的電子郵件(比如文件系統或數據庫),並讓電子郵件生成一個服務。 您的服務會關注要發送的新電子郵件。 如果發送時發生錯誤,您可以將電子郵件放回隊列中,稍后再試。

也許您甚至可以使用使用GoogleMail作為中繼服務器的本地STMPServer。 在這種情況下,您可以使用內置的拾取目錄功能而不是自己編寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM