使用c#进行电子邮件排队

时间:2009-06-12 12:06:05

标签: c#

不确定是否可行,但我正在寻找能够排列电子邮件消息的解决方案。

有没有办法编写某种类型的网络应用程序,即使在我提交邮件和关闭网页后,它也会运行并向电子邮件服务器发送一定数量的电子邮件。可能是某种守护进程?

4 个答案:

答案 0 :(得分:6)

本地电子邮件服务器就是这样做的。一旦您设置了本地电子邮件中继服务器(确保它只接受来自localhost的电子邮件),然后只是发送电子邮件给它并让它处理实际发送电子邮件。

它比你能写的任何东西都更可靠和可配置。根据平台的不同,您应该能够调整交付率和您想要的任何其他参数。

Windows:IIS SMTP Server
Linux:Postfix

答案 1 :(得分:0)

您始终可以构建连接到网络应用中的网络服务的 Windows服务,该网络服务提供队列中的电子邮件。通过这种方式,您可以关闭浏览器,Windows服务只会抓取大量电子邮件以便每次运行。

发送后,您可以使用不同的Web服务呼叫告诉Web应用程序某些电子邮件已发送或延迟,因此webapp可以控制正确的队列。

我不建议使用本地邮件服务器的原因是,几乎不可能从发送/退回/延迟的电子邮件中获取状态反馈。如果邮件退回或延迟,本地邮件服务器将回复发件人的电子邮件地址,而不是回复您的网络应用程序。您必须构建一个POP客户端来检查跳出,这使得整体解决方案比它本来应该更加复杂。构建自定义轮询/发送机制确实可以为您的所有电子邮件提供状态更新,如果电子邮件是您应用的关键功能,那么这一点尤为重要。

答案 2 :(得分:0)

编写发送电子邮件的Windows服务。您可以使用MSMQ对Web应用程序中的电子邮件进行排队。 Windows服务将从Message Queue中读取并以异步方式发送电子邮件。

答案 3 :(得分:0)

假定生成不会花费过多的时间(即 - 您的应用在Web流程中处理的时间太长),您只需将SMTP配置从默认设置Network传递到{{ 1}}。这应该比发送角度更快,因为你只是在编写文件,邮件服务器会编写这些文件。

另一种选择是管理离线发送。在这种情况下,您可以将消息填充到数据库或MSMQ或任何您认为合适的地方,然后编写应用程序以进行阅读和发送。我倾向于选择命令行应用程序而不是服务,因为您不需要实时网络响应和服务带来他们自己的一系列挑战,例如长时间运行,难以检测内存泄漏以及如果批处理难以恢复崩溃。命令行应用程序更容易构建,测试并最终在生产中更灵活。您始终可以安排它们通过Windows计划任务运行。