【问题标题】:How to send automatic scheduled emails如何发送自动预定的电子邮件
【发布时间】:2016-04-02 10:51:23
【问题描述】:

有一个 ASP.net C# Web 应用程序,通过它我们可以将收件人电子邮件、时区和他们的 smtp 服务器详细信息输入到数据库中。我有两个要求: 1. 考虑数据库中的一个表。当表格发生变化时,必须发送电子邮件。如果我们可以每 5 分钟不断检查一次数据库,那是可以的。如果我们可以立即发送它会很棒,但延迟也可以。 2. 在各自时区的凌晨 12 点自动发送电子邮件。

我熟悉 C# 编程。但是对于自动调度的东西有点新。这听起来像是一个基本问题,但如果您能提供帮助,那就太好了。实现这一点的最佳方法是什么 - Web api 或 Web 服务或 WCF 或 Windows 服务或 Web api 和任务调度程序的组合?请让我知道你的想法。还有一个关于如何实现它的小提示会很棒。

【问题讨论】:

  • 定期后台任务最好由 Windows 服务或计划的控制台应用程序执行。
  • 为什么不在桌子上设置触发器,以便在特定桌子上发生任何变化,您都会自动生成并发送电子邮件。这实际上是一个非常简单的任务。不要浪费时间每 5 分钟收集一次数据库来做一些如此基本的事情。或者,您可以根据时间戳创建一个在上午 12 点运行的作业,检查具有修改的时间日期字段等的列......仍然非常简单的任务要完成
  • @MethodMan 数据库中执行脚本/CLR 的触发器?对我来说似乎有点矫枉过正。
  • 我需要在上午 12 点发送一份附有 PDF 的报告。如果是基于数据库更改的电子邮件,它可以只是一封正文较小的电子邮件。那么 Windows 服务或控制台是最好的?
  • @Rob 如果表不经常更改,我认为这并不过分,也每 5 分钟检查一次数据库,有些人也会认为是过大的。但是,如果 OP 决定采用该路线这仍然是一项非常简单的任务...... OP 唯一需要做的就是添加一列或 2 CreatedTime 和 UpdatedTime 等......计划的作业仍然可以处理所有这些

标签: c# web-services asp.net-web-api windows-services wcf-web-api


【解决方案1】:

您可以选择设置触发器,但我讨厌这种方法,因为它会增加表格拖曳插入的开销,而实际上并不需要。我认为通过考虑池化,您走在了正确的道路上。 .net 中有一个不错的小库,名为 hangfire,我发现它对执行计划任务非常有用。它具有非常复杂的报告,几乎所有时间都运行良好。你可以试一试。但是,如果您想更好地控制事情,编写一个小型 Windows 服务也不要那么糟糕。我认为使用 webapi 或 wcf 做 web 服务有点矫枉过正,可能不符合目的。

【讨论】:

  • 谢谢。如果我必须实现 web api 方法。我想这样做的唯一方法是结合控制台应用程序/ Windows 服务来发送发布请求。那是对的吗 ?并且此 Windows 服务还应每 5 分钟检查一次数据库。这就是你说它有点矫枉过正的原因吗?我理解对了吗?
  • 是和不是。结合 Web API 方法的控制台应用程序将立即执行电子邮件发送指令,并且可能会阻塞您的服务器。我想说的是,您应该拥有某种队列系统(以hangfire 作业甚至msmq 队列的形式),您可以在其中放下一条消息以发送电子邮件并完成它。现在,其他一些服务可以从该队列中读取并作为后台进程一一发送电子邮件。这听起来清楚吗
  • 是的卡马尔。我明白你的观点,它可能会阻塞服务器。那么应该在凌晨 12 点发送的预定电子邮件怎么样。
  • 请通读hangfire文档。它可以采用 cron 表达式,您应该能够设置各种规则,例如每天上午 12 点执行电子邮件发送作业,每周五执行另一个作业等。我试图说服您使用像 hangfire 这样的现成解决方案的原因没有意义做别人做得好的事情。您应该始终保持您的 IIS 干净不应该在任何时候通过调用某些 API 端点来发送电子邮件来使其忙碌
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2012-11-18
  • 2012-11-14
  • 2011-10-22
  • 2013-08-22
相关资源
最近更新 更多