1

自购买之日起 12 个月后向客户发送通知电子邮件的最直接方式是什么?

我们的 Web 服务器运行一个连接到 SQL Server 的 ASP.NET MVC 3 网站。目前我们每周一手动运行一个通知过期用户的网页。

到目前为止,这是我想到的选项:

  1. 每天使用任务计划程序运行网页
  2. 构建一个控制台应用程序,不断检查计时器并最终发送通知
  3. 构建一个像 2) 这样的 windows 服务,在失败的情况下可以自动重启

我错过了一些更容易的东西吗?

谢谢。

4

1 回答 1

0

我在以前的公司也遇到过同样的问题。最后,我们选择了任务计划程序。主要原因是任务计划程序是在 Windows 中处理重复性任务的标准机制,因此在未来比其他选项更易于维护。

我们的控制台应用程序每天由任务计划程序运行,它被设计为“智能”。我的意思是聪明。

  • 控制台应用程序是一个调用 WCF 服务的虚拟应用程序。所有逻辑都在 WCF 服务内部。这样做的原因是将所有代码保存在同一个地方。
  • 如果运行失败会在我们的系统日志中写入警报(每天检查一次,它是一个数据库表)。如果发生灾难性故障(无法访问数据库),我们会写入控制台应用程序目录中的文件。
  • 如果它已经在处理中,则不允许运行第二个实例(某种单例)
  • 它会在数据库中跟踪发送了哪些电子邮件,因此,如果同一天执行两次,则仅第一次发送电子邮件。
  • 它有一个/whatif参数
  • 如果电子邮件失败,则会记录下来并继续该过程。
  • 如果它不得不发送几封电子邮件并且在某个时刻失败了,那么下一次执行将从它停止的点开始。

在内部,代码类似于

Linq to get all the users that deserved an email
For each user
  Send the email, mark it as sent in DB and close transaction
  If email fails Write to log.
Next
Write log with stats

这种方式更慢但更安全。如果它必须向 4000 个用户发送电子邮件并且在用户 1337 中失败,那么我们会记录发生的事情,并且下次执行时它将从 1338 恢复。

在我们的系统登录一个文件夹中,我们通常每天都有一个条目,内容如下:

电子邮件进程由调度程序于 ​​02:00 开始。已发送 4000 封电子邮件,0 封失败。

如果某事失败:

电子邮件进程由调度程序于 ​​02:00 开始。已发送 3999 封电子邮件,其中 1 封失败。发送给用户 xxxxx 的电子邮件失败。原因:电子邮件地址“joeBlogs@@gmail.com”不正确。

于 2013-04-10T12:13:26.317 回答