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

标签 c# asp.net smtp

我不想只在这里发布堆栈跟踪,但我没有想法......我的应用程序为网站上的各种任务发送电子邮件,90% 的时间都没有问题。然而,ASP.NET 每隔一段时间就会抛出一个奇怪的异常,这似乎与邮件服务器连接有关(我使用 google business servers 来发送电子邮件)。该错误对我来说太笼统了,无法调试,因此出现了下面的堆栈跟踪。我的应用捕获异常并写回通用的“在 5 分钟内重试响应”。

我被这个错误难住了,因为:

  • Google 电子邮件通常非常可靠(它是从我的域发送的,而不是 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 在需要时用来限制流量的常用方法。

关于c# - 使用 ASP.NET 发送电子邮件的临时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3660224/

相关文章:

python - 使用python smtplib发送邮件错误

python - 从服务器 python 发送电子邮件

c# - 为什么我的映射适用于 IList 而不是 LIst

c# - 为什么我选择的值在下拉列表中显示两次 (asp.net mvc)

c# - 大多数 LOB 应用程序使用哪种技术?

c# - 在 ASP.NET Identity 2.0 中获取当前用户 ID

java - 如何从黑莓应用程序发送 smtp 电子邮件

c# - 排序和分组点

c# - 如何从 XmlReader 创建 XML 文件?

c# - 当前网络请求执行过程中产生了未处理的异常