ASP.NET MVC + SQL Server 应用程序 : Best Way to Send Out Event-Driven E-mail Notifications

标签 asp.net asp.net-mvc email notifications

我有一个 ASP.NET MVC 应用程序,它在后端使用 NHiberante 和 SQL Server 2008。要求每天/每周发送事件驱动通知和每周一般通知。

以下是事件驱动工作流程需要如何工作的示例:

  1. 员工创建了多个采购订单。
  2. 每天都会向下属员工下达采购订单的任何主管发送电子邮件通知,其中包含下属创建的需要其批准的所有采购订单的列表。主管应该只收到一次电子邮件(例如,如果员工 A 创建了采购订单,则他的主管不应每天收到电子邮件,直到他批准为止)。此外,采购订单 list 应仅包括主管尚未采取行动的订单。如果没有采购订单需要特定主管的批准......他们不应该收到电子邮件。
  3. 每天都会向部门经理发送电子邮件通知,其中包含下级主管批准的所有采购订单的列表,方式与上述第 2 条类似。
  4. 主管或部门为批准采购订单而采取任何行动时。经理,员工应该每天收到一封电子邮件通知,列出所有此类更改。如果给定员工没有任何电子邮件,他们根本不应该收到电子邮件。

因此给出这样的工作流程:

  • 安排此类通知每天、每周甚至在事件发生后立即发送的最佳方式是什么?
  • 您如何确保此类事件驱动的通知仅发送一次?
  • 您将如何处理异常情况,以确保记录发送电子邮件的失败尝试,以便第二天可以尝试发送?

谢谢!

最佳答案

我会先将所有电子邮件、通知等保存到数据库/表中,然后提供一项服务来轮询此数据库或表中的新条目,以处理电子邮件/通知的实际发送。

为了解决您的特定情况,您可以让 Controller 在需要电子邮件/通知时写入数据库,并且执行间隔/事件特定检查的服务也会写入数据库以创建新电子邮件。这样,您的应用程序和服务并不真正关心这些通知如何发生或发生了什么,它们只是说,“嘿,做点什么。”电子邮件/通知服务实际上正在执行实现。

这样做的优点是,如果您的电子邮件提供商出现故障,您不会丢失任何电子邮件,并且您有所有发送电子邮件的历史记录,其中包含发送时间、发送者等详细信息...您也可以撕掉或更改电子邮件发送者可以执行更多操作,例如发送到 Twitter 或手机短信等。这可以有效地将您的通知与应用程序分离。

我最近制作的所有应用程序都使用这种类型的模型,它已经阻止了由于服务故障和其他原因导致的电子邮件丢失。它还可以查找已通过系统的所有电子邮件并获取指标,使我能够通过在电子邮件记录中存储额外信息(例如发送原因、是否报告错误等)来优化发送电子邮件的需求。 .. 可以在不更改主应用程序的情况下添加基于一天中的时间或用户的路由通知(例如,如果是电子邮件,则转到短信)等附加功能。

您的客户可能认为他们今天需要的只是电子邮件,但您应该确保您的解决方案足够灵活,以便在未来几周内不仅仅可以处理电子邮件。

关于ASP.NET MVC + SQL Server 应用程序 : Best Way to Send Out Event-Driven E-mail Notifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452236/

相关文章:

email - Postfix 不会发送电子邮件

c# - 如何跨项目和客户端自定义类库配置设置

javascript - 在 .NET MVC 中将服务器值获取到 JavaScript 的最佳方法?

javascript - asp.net 验证错误后 Page.IsValid 始终为 false

asp.net - 32 位池和 64 位池之间的内存使用情况

c# - 遍历 MultiSelectList

javascript - 简单的 mailto 函数,从 html 文件撰写电子邮件

c# - MVC Controller 有什么特别之处称为属性吗?

c# - 模型/实体与复杂类型

java - 使用 jxl 发送电子邮件