我正在编写一个应用程序,需要向我们的学生发送大量的电子邮件,这些学生将从我们的数据库中选择(每封电子邮件将被个性化,包括他们的姓名,课程等...所以需要一次发送一个。)
我可以在SmtpClient上进行循环,但是我担心随着我想要发送的数字,我最终会遇到超时问题,或者我的线程因为缺少机器资源而被杀死。
此时我只是在寻找更好的方法来处理这个问题的建议,或者如果循环使用SmtpClient是一个不错的解决方案,我应该如何处理它以防止我在上面发布的内容。
网络服务是否会成为更好的替代方案?
请指教, TIA
答案 0 :(得分:11)
我的建议是批量处理。不要尝试运行ASP.NET代码来创建20K电子邮件并将其发送出去,因为您必须运行超时和性能问题。而是使用收件人,主题,正文填充表格,并从Windows服务开始批处理。这样,代码的执行方式就是可以管理延迟,而不是让网页等待请求返回。
答案 1 :(得分:6)
好的,首先 - 这不是很大,我一直在处理50.000封电子邮件+
将电子邮件写入FOLDER目录。然后使用您可以安装的本地SMTP服务,将其指向作为拾取目录的文件夹。这至少可以确保你之间有一个不错的缓冲区(即你可以完成asp.net端,而那时不发送电子邮件)。
答案 2 :(得分:2)
如何使用 SQL Server 本身提供的数据库邮件工具。您仍然可以使用asp.net,但SQL Server将发送电子邮件,您只需调用存储过程并将内容留给SQL Server。
我不推荐批量选项,因为除非你需要付出很多努力,否则不会有任何优化或排队的事情。
数据库邮件工具也提供队列和优先级选项。如果出现问题,电子邮件将再次排队并稍后发送,但其他电子邮件仍将被发送。
在SQL Server 2008中称为数据库邮件,在以前的版本中称为 SQL Mail 。
有关详细信息,请查看以下链接:
答案 3 :(得分:0)
您可以在计时器上使用javascript来请求以不会超时的小块发送邮件的脚本。然后你从浏览器调用脚本。添加进度条,身份验证等
答案 4 :(得分:0)
您不需要Web服务,而是将电子邮件批量处理到队列中的方法(可能是数据库中的“Email_Queue”表)。然后,在服务器上运行的Windows服务可以以先进先出的方式读取队列,一次以合理的块发送到SMTPClient,在处理时从队列中删除项目。您可能需要运行一些测量来确定邮件服务器的块大小和延迟。