使用ASP.NET发送电子邮件的临时问题

Sim*_*com 9 c# asp.net smtp

我讨厌在这里发布一个堆栈跟踪,但我没有想法......我的应用程序在网站上发送各种任务的电子邮件,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);
    }
Run Code Online (Sandbox Code Playgroud)

例外:

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)
Run Code Online (Sandbox Code Playgroud)

Dav*_*sky 6

我过去曾在批量电子邮件系统上工作过.您获得的异常消息完全是描述性的:SMTP服务器暂时不接受邮件.这可能是由于许多条件:

  1. 服务器很忙
  2. 您发送太多电子邮件太快(这可能会让您看起来像垃圾邮件发送者)
  3. 一般错误

以后重试电子邮件始终有效的事实表明这是正常的预期行为.没有什么可以做的不同以避免这种情况,它是ISP用于在需要时限制流量的常用方法.