1

我有一个数据输入和编辑表单,在每个数据输入或更新事件中,我都必须向动态收件人列表发送电子邮件。一旦用户单击保存或编辑按钮,我就一直在发送电子邮件,但我正在考虑首先将数据保存到数据库中,然后再发送电子邮件。我想这样做部分是为了改善应用程序的响应时间,因为电子邮件发送往往需要比预期更长的时间。

有没有人做过一些与此相关的事情,有没有更好的方法来实现类似的东西,或者有人知道这样的好教程。

电子邮件正文为 html 格式。

4

3 回答 3

2

您可以编写一个处理发送电子邮件的 Windows 服务,然后使用消息队列作为将数据从应用程序传递到服务的方法。即您的应用程序保存数据,然后将消息添加到队列。该服务不断轮询队列中的消息,将每条消息作为电子邮件发送。

于 2010-09-29T07:12:41.853 回答
1

我同意 ck 关于使用服务和消息队列的观点,但有一些替代方案。

一种是使用定期轮询数据库的服务。这可以让您以更高的 cpu 负载为代价避免消息队列(该服务将执行许多不必要的数据库调用)。

您也可以使用数据库触发器或数据库中的计划作业直接在数据库中执行此操作。最新版本的 SQL Server 支持运行用 C# 或 Vb.Net 编写的存储过程,因此您可能可以在此处重用大部分现有代码。

最后,您可以选择一个简单的解决方案,在您的 asp.net 应用程序的单独线程上发送电子邮件。通过这种方式,您无需使用服务应用程序,并且您可以或多或少地重用您的代码,就像现在一样。

于 2010-09-29T07:19:15.283 回答
0

一种方法是写入数据库,然后将消息放在一个队列中,告诉电子邮件服务(编写为 Windows 服务)有电子邮件要发送。然后,电子邮件服务与数据库对话以找到它实际需要做的事情。这将电子邮件服务与 Web 应用程序分离,也避免了轮询。

This is slightly different to ck's solution in that the queue message is used as a trigger rather than containing the email information. This decouples the web app and the email service to some extent, and means the email service can be reused by multiple clients without each client having to observe (and keep in step with) the same email message format.

于 2010-09-29T07:57:57.717 回答