【问题标题】:Problems Sending Large Volume of Emails using ASP.Net使用 ASP.Net 发送大量电子邮件的问题
【发布时间】:2010-01-20 21:30:25
【问题描述】:

我在从 ASP.Net 应用程序发送大量电子邮件时遇到问题。我不会发布代码,而是解释发生了什么。该代码应该向 4000 个收件人发送电子邮件,但似乎停滞在 385/387。


代码以字符串的形式创建电子邮件的内容。

然后它会选择要发送到的电子邮件地址列表。

通过数据阅读器循环遍历数据,它会挑选出电子邮件地址并发送电子邮件。

电子邮件发送由一个单独的方法完成,该方法可以处理失败并返回结果。

在发送每条记录时,我会在 XML 文档中生成一个 XML 节点来记录每次特定的发送尝试。

循环似乎提前结束,XML 文档被保存到磁盘。


现在我知道代码有效。我使用同一台 SMTP 机器在本地运行它,它在 500 条记录中运行良好。当然,内容较少,但我看不出这会有什么不同。

我认为页面本身不会超时,但即使发生了超时,我确信 .Net 会继续处理该页面,即使用户看到页面超时错误也是如此。

任何建议都很感激,因为我很困惑。

【问题讨论】:

  • 发布一些代码可能对您有用。此外,查看事件日志以查看是否发生任何故障。

标签: c# asp.net email


【解决方案1】:

您正在发送大量电子邮件。在单个请求的范围内?如果请求花费的时间超过某个(可配置的)时间,IIS 将终止请求。

您需要使用单独的进程来执行此类操作。无论是从 global.asax 中启动的 Timer,还是检查 database/app_data 目录中电子邮件列表的 Thread,还是通过 WCF 向其发送请求的服务,或这些的某种组合。

【讨论】:

  • 从 asp.net 中发送大量电子邮件,无论您如何操作(计时器或其他)都是一个坏主意。使用单独的服务应用程序来处理电子邮件。
【解决方案2】:

我过去处理此问题的方式是将电子邮件排队到 SQL Server 表中,然后启动另一个线程来实际处理/发送电子邮件。另一个 aspx 实用程序页面可以给我队列的状态或重新启动处理。

如果您要向公众发送邮件,我还强烈建议为您的 SMTP 服务器使用现有的、合法的第三方邮件服务。否则,您将面临 ISP 关闭您的邮件访问或(更糟)您自己的服务器被列入黑名单的风险。

【讨论】:

    【解决方案3】:

    如果网络服务器有超时设置,如果运行时间过长会杀死页面。

    【讨论】:

      【解决方案4】:

      我建议您检查 HttpServerUtility.ScriptTimeout 的值 - 如果设置了此值,那么当脚本运行该时间长度时,它将被关闭。

      您可以做的就是完全走老派 - 将一些 Response.Writes 与一些 Response.Flush 组合起来,将一些数据发送回客户端浏览器,这往往会使脚本保持活动状态(当然可以在旧的 ASP.NET 1.1 站点)。

      此外,您还需要考虑到该脚本的运行时间 - 如果您的服务器已设置,服务器也可能已配置为执行应用程序重置(默认情况下,在 IIS 中设置为每 29 小时一次)大约 24 小时,这与您的脚本运行的时间相吻合,您也可能会看到这一点 - 尽管脚本正在记录其响应这一事实可能会排除这种情况 - 除非您的 XML 文档格式不正确?

      话虽如此,我会选择 Will's answer 使用单独的进程(不仅仅是网站托管的线程),或者 Bryan said 使用适当的邮件服务,这将帮助您诸如反弹、点击跟踪、报告、打开计数等。

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 1970-01-01
        • 2012-09-24
        • 2011-08-19
        • 2010-11-10
        • 1970-01-01
        • 2013-09-25
        • 2012-01-02
        • 1970-01-01
        相关资源
        最近更新 更多