如何在经典的asp中执行多线程/后台处理

时间:2009-06-04 20:26:23

标签: multithreading email asp-classic

我需要通过经典asp应用程序上的后台作业发送电子邮件,这样用户就不必等待慢速网络服务器完成发送电子邮件。

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

7 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

我同意tomjen的观点。将电子邮件保存在数据库表中,然后使用后端进程实际发送电子邮件非常有效,尤其是在您发送大量电子邮件时。我建议使用Perl来做后端邮件,因为有几个软件包可以很容易地完成工作。

答案 2 :(得分:2)

3rd party COM objects你可以比IIS内置的更好地处理邮件。您只需关闭消息并处理队列,以便程序立即获得控制权。

答案 3 :(得分:2)

Persits生成着名的AspEmail COM组件,该组件随邮件排队系统一起提供,可以满足您的需求。

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

您的代码实际上是将消息发送到在服务器上运行的队列守护程序,并在单独的进程中发送队列中的所有邮件,从而不会阻止您的ASP脚本完成其执行。

答案 4 :(得分:1)

很抱歉,但据我所知,没有办法使用旧的ASP生成单独的线程。

如果你不想要AJAX隐藏的IFRAME呢?丑陋但它有效...

答案 5 :(得分:1)

如果您不想使用我的其他建议,您可能需要考虑运行另一个程序,该程序只发送电子邮件,然后通过COM或(本地)tcp套接字与此程序通信。这应该比通过互联网连接到服务器快得多,并且避免了使用数据库的延迟。

答案 6 :(得分:0)

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

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