8

我正在编写一个应用程序,该应用程序需要向我们的学生发送大量电子邮件,这些学生将从我们的数据库中选择(每封电子邮件都将个性化,包括他们的姓名、学习课程等……所以需要一次发送一份)。

我可以在 SmtpClient 上循环执行此操作,但我担心使用我尝试发送的数字,我最终会遇到超时问题或由于缺乏机器资源而导致我的线程被杀死。

在这一点上,我只是在寻找更好的处理方法的建议,或者如果循环 SmtpClient 是一个好的解决方案,我应该如何处理它以防止我在上面发布的内容。

Web 服务会是更好的选择吗?

请告知,TIA

4

5 回答 5

11

我的建议是批量处理。不要尝试运行 ASP.NET 代码来创建 20K 电子邮件并将它们发送出去,因为您一定会遇到超时和性能问题。而是用收件人、主题、正文填充表格并从 Windows 服务开始批处理。这样,您的代码以可以管理延迟的方式执行,而不是让网页等待请求返回。

于 2010-04-12T17:12:49.653 回答
6

好的,首先 - 这并不大,我已经处理了 50.000 封电子邮件+

让电子邮件写入 FOLDER - 目录。然后使用您可以安装的本地 SMTP 服务,将其指向作为拾取目录的文件夹。这至少可以确保您在两者之间有一个不错的缓冲区(即您可以完成 asp.net 端,而此时不发送电子邮件)。

于 2010-04-12T17:11:09.020 回答
2

使用SQL Server本身提供的数据库邮件工具怎么样。您仍然可以使用 asp.net,但电子邮件将由 SQL Server 发送,您只需调用存储过程并将事情留给 SQL Server。

我不推荐批处理选项,因为除非您必须付出很多努力,否则不会有任何优化或排队的事情。

数据库邮件工具也提供队列和优先级选项。如果出现问题,电子邮件将再次排队并稍后发送,但其他电子邮件仍将被发送。

在 SQL Server 2008中称为数据库邮件,在以前的版本中称为SQL 邮件。

欲了解更多信息,请查看以下链接:

于 2010-04-12T22:17:16.167 回答
0

您可以在计时器上使用 javascript 来请求以不会超时的小块发送邮件的脚本。然后你会从浏览器调用脚本。添加进度条、身份验证等。

于 2010-04-12T17:11:43.013 回答
0

您不需要 Web 服务,而是需要一种将电子邮件批处理到队列中的方法(可能是数据库中的“Email_Queue”表)。然后,在服务器上运行的 Windows 服务可以以先进/先出的方式读取队列,一次以合理的块发送到 SMTPClient,在处理项目时从队列中删除项目。您可能需要运行一些测量来确定您的邮件服务器的块大小和延迟。

于 2010-04-12T17:17:32.420 回答