【问题标题】:Saving data in SQL Server database and then sending the email later将数据保存在 SQL Server 数据库中,然后稍后发送电子邮件
【发布时间】:2010-09-29 07:10:33
【问题描述】:

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

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

电子邮件正文为 html 格式。

【问题讨论】:

  • 为什么发送需要很长时间?你寄给收件人吗?尝试掺杂到一个拾取目录中,然后让 MTA 从那里发送。
  • TomTom - 我发送给收件人,我尝试异步发送,但这并没有造成和 idfference。

标签: asp.net sql-server-2005 html-email


【解决方案1】:

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

【讨论】:

  • 或者你跳过消息队列(单独安装,通常不可用)并使用服务代理(sql server 中的相同功能)。
【解决方案2】:

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

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

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

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

【讨论】:

  • Rune Grimstad - 我尝试在我的 asp.net 应用程序中的单独线程上发送,但它在某些方面没有任何区别
  • 我想我可能会认真考虑数据库触发器或数据库中的计划作业
  • 你是如何开始新话题的?我认为如果您使用 ThreadPool.QueueUserWorkItem 方法,它应该可以工作。参考:haacked.com/archive/2009/01/09/…
【解决方案3】:

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

这与 ck 的解决方案略有不同,因为队列消息被用作触发器,而不是包含电子邮件信息。这在一定程度上将 Web 应用程序和电子邮件服务解耦,并且意味着电子邮件服务可以被多个客户端重用,而每个客户端都不必遵守(并保持同步)相同的电子邮件消息格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 2014-11-22
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多