代码之家  ›  专栏  ›  技术社区  ›  Cory House

如何在经典ASP中执行多线程/后台进程

  •  4
  • Cory House  · 技术社区  · 16 年前

    我需要通过一个经典的ASP应用程序的后台作业发送电子邮件,这样用户就不必等待一个缓慢的Web服务器完成发送电子邮件。

    我知道我可以使用Ajax生成两个单独的请求,但我不希望需要Javascript。另外,我怀疑有更好的方法来解决这个问题。思想?

    7 回复  |  直到 15 年前
        1
  •  11
  •   tomjen    16 年前

    你想得太狭隘了。您不必从ASP发送电子邮件。把它放到数据库中,然后有一个单独的程序,比如说,每分钟运行一次,并发送数据库中的所有电子邮件。

        2
  •  3
  •   Rhinosaurus    16 年前

    在这一点上,我同意汤珍的看法。将电子邮件保存在数据库表中,然后使用后端流程实际发送电子邮件,效果非常好,尤其是在发送大量电子邮件的情况下。我建议Perl做后端邮件程序,因为有几个包很容易完成任务。

        3
  •  2
  •   Diodeus - James MacFarlane    16 年前

    3rd party COM objects 您可以获得比内置于IIS更好的邮件处理功能。您只需传递消息,它就会处理队列,这样程序就可以立即获得控制权。

        4
  •  2
  •   Frank Bailey    15 年前

    Persits生产著名的aspemail com组件,该组件附带一个邮件队列系统,可以满足您的需要。

    http://www.aspemail.com/manual_07.html

    您的代码基本上将消息发送到运行在服务器上的队列守护进程,并在单独的进程中发送队列中的任何邮件,从而不会阻碍ASP脚本的执行。

        5
  •  1
  •   tekBlues    16 年前

    抱歉,但据我所知,没有任何方法可以使用旧的ASP生成单独的线程。

    如果你不想要Ajax,那么隐藏的iframe呢?丑陋,但它起作用…

        6
  •  1
  •   tomjen    16 年前

    如果你不想使用我的其他建议,你可以考虑运行一个不同的程序,它只发送电子邮件,然后通过COM或(本地)TCP套接字与这个程序通信。这应该比通过Internet连接到服务器快得多,并且可以避免延迟使用数据库。

        7
  •  0
  •   Thomas Kjørnes    16 年前

    加快速度的一个好方法是指示cdosys使用Web服务器的IIS拾取目录(通常是c:\inetpub\mailroot\pickup)。假设您的Web服务器安装了SMTP虚拟服务器。

    另一个类似但速度更快的选项是手动生成*.eml文件,并将它们放在pickup目录中。另外,为了避免可能的冲突,您可以将文件放在临时目录中,然后让一个批处理文件以一定的间隔将它们移动到拾取目录。