【问题标题】:Classic ASP Website timed out sending mail (IIS6, default SMTP server)经典 ASP 网站发送邮件超时(IIS6,默认 SMTP 服务器)
【发布时间】:2011-10-11 11:50:41
【问题描述】:

我刚刚将客户的 Classic ASP 网站移动到他们自己的 VPS 服务器(Windows 2003、32 位、IIS6、虚拟 SMTP 服务器),大约 12 小时后,该网站在尝试发送电子邮件时开始失败 (CDO.Message )。

任何发送电子邮件的脚本都需要很长时间才能返回错误:Active Server Pages、ASP 0113、脚本超时。标准超时已到位。奇怪的是,使用相同的电子邮件发送方法和设置(实际上是相同的功能)向我发送错误的自定义错误页面能够向我发送错误通知。

我需要让网站正常运行,所以我停止/启动了没有帮助的 SMTP 服务器,然后重新启动了 IIS,它立即解决了问题。

我担心这可能会再次发生。关于什么可能导致此问题的任何建议,或者默认 SMTP 服务器是否需要一些额外的设置来应对相当大容量的网站?

【问题讨论】:

    标签: asp-classic iis-6 smtp


    【解决方案1】:

    由于经典的 ASP 代码必须调用基于外部 COM 的组件才能发送电子邮件(如果您正在创建 CDO 消息,这就是您正在做的事情 --- 任何时候您的 ASP 代码中有 CreateObject 调用,即 COM ),如果外部组件响应时间过长,asp 代码就会出现挂起。例如,大多数 SMTP 组件将同步尝试将消息发送到 SMTP 服务器,阻止您的 asp 代码执行,直到发送电子邮件消息。这在非常繁忙的 SMTP 服务器上会成为一个问题,因为它们对连接请求和 SMTP 命令的响应速度可能非常慢。另一个糟糕的情况是,许多 ISP/主机试图通过故意使他们的 SMTP 服务器响应缓慢来限制您发送电子邮件的速度。更糟糕的是,一些主机甚至会在设定的时间段内实际建立后续连接,速度会逐渐变慢。这会显着影响您的站点性能,因为您通常会在 SMTP 发送期间阻止您的页面代码。

    最好的解决方案是使用不强制执行此类限制措施的主机或 SMTP 服务器。除此之外,还有一种方法可以通过使用消息队列来解决这个问题。如果您使用 CDO,这意味着您必须在 IIS Web 服务器上配置 Microsoft SMTP 服务才能使用。即使您在 IIS 机器上确实有其他 SMTP 软件,也可以正确配置它。一旦 Microsoft SMTP 服务在您的 IIS 服务器上运行,它将能够在服务器上对电子邮件进行排队,并将它们与您的应用程序/页面代码异步转发到配置的 SMTP 服务器。配置 Microsoft SMTP 服务时,您必须定义它所谓的“智能主机”。这只是您要将出站电子邮件路由到以在您的网络上传递的 SMTP 服务器。

    配置完成后,您只需更改使用 CDO 将电子邮件消息排队的代码,而不是尝试发送它。在您的 CDO 代码中,您应该有一行设置 CDO 字段值,如下所示:

    objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    

    您希望将“sendusing”字段的值从值 2 更改为值 1。这些是 cdoSendUsingPort (2) 和 cdoSendUsingPickup (1) 枚举的枚举值。完成此操作后,您还可以删除“smtpserver”和“smtpserverport”字段,因为它们会被 Microsoft SMTP 服务的配置方式覆盖。完成此操作后,您的 asp 代码将快速生成电子邮件,并将在 IIS 服务器的邮件提取文件夹中排队。因此,您的应用程序/页面代码将运行得更快。随着 SMTP 服务在后台缓慢地传递它们,传出的电子邮件可能会累积在队列文件夹中。它不会使电子邮件发送得更快,但它确实可以防止您的代码因 SMTP 服务器缓慢而阻塞。

    【讨论】:

    • 虽然我之前使用过 Jmail 将邮件放在拾取文件夹中来发送邮件,但我没有意识到这可以通过 CDO 邮件组件来完成,所以 +1 显示了这是如何完成的.
    【解决方案2】:

    我后来发现问题不是由电子邮件的实际发送引起的,而是我通过从另一个 ASP 页面(通过 XML 对象)检索 HTML 来生成电子邮件的 HTML 正文这一事实。

    我尝试了各种方法来解决这个问题,包括切换邮件组件(到 Jmail)和使用不同版本的 XML 对象,但问题仍然会间歇性地出现。

    最后我更改了代码以生成电子邮件正文的 HTML,而不是调用另一个 ASP 页面并读取它的响应。

    取消使用 XML 对象似乎已经解决了问题,但始终找不到原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      相关资源
      最近更新 更多