c# - 使用 ASP.NET MVC 发送 500 封电子邮件 : throttling

标签 c# asp.net asp.net-mvc email exchange-server

我正在尝试从 ASP.NET MVC 4 Web 应用程序向我们的客户发送 500 封电子邮件。我只是使用一个 foreach 循环,如下所示。大约 50 个周期后,我收到一个一般异常,表示邮件消息无法发送。我相信我正在处理限制我的 Web 应用程序的限制MS Exchange 设置。如何简单地实现限制来绕过这些限制?

谢谢。

foreach (var toAddress in addresses)
{
   var message = new MailMessage(fromAddress, toAddress)
   {
      Subject = subject,
      Body = body
   };

   message.IsBodyHtml = isHtml;

   try
   {
      using (var client = new SmtpClient())
      {
         client.Send(message);
      }
   }
   catch (Exception ex)
   {
      Debug.WriteLine("Cannot send e-mail to " + message.To + Environment.NewLine +
                      "Subject: " + subject + Environment.NewLine +
                      "Body: " + body + Environment.NewLine + 
                      "Exception: " + ex.Message);
   }
}

最佳答案

我想看看Quartz.NET并使用服务发送电子邮件。至于排队,也许可以考虑简单的文件存储或数据库。

如果您使用诸如 Thread.Sleep 之类的内容,请记住,您将阻止服务器呈现最终输出(例如,如果这是通过表单提交触发的,则生成的 View 将不会出现)待所有电子邮件发送完毕后才会显示)。通过使用诸如quartz之类的库,您可以保持服务器响应请求,同时减轻电子邮件发送的负担。

此外,作为引用,还有另一篇关于在不拖拽用户体验的情况下执行昂贵操作的 SO 帖子。这个可以查到here ,(恕我直言)最相关的答案是 TheCodeKing .

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

相关文章:

c# - 仅删除特定区域中的空间

c# - 使用 Activator.CreateInstance 时解析注入(inject)的实例

CSS Bootstrap - 删除左边距

asp.net-mvc - 在 ASP.NET MVC 中处理表单的正确方法是什么?

asp.net-mvc - 导航栏上的集中按钮

c# - Twitterizer - 搜索 API 示例

c# - C# 和 .net 中的僵尸对象它们是什么以及如何避免它们

c# - 避免在单击按钮asp.net时刷新页面

c# - ASP.NET MVC View 编译失败

c# - CryptoStream 在关闭解密时抛出错误