ASP.NET MVC + SQL Server应用程序:发送事件驱动的电子邮件通知的最佳方式

wgp*_*ubs 5 asp.net email asp.net-mvc notifications

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

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

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

所以给定这样的工作流程:

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

谢谢!

Edu*_*eni 2

您可以在控制器中添加正常操作

Function SendEmails() As ActionResult
    Dim result As String = ""
    ''//big timeout to handle the load
    HttpContext.Server.ScriptTimeout = 60 * 10 ''//ten minutes

    result = DoTheActualWork()

    ''//returns text/plain
    Return Content(result)

End Function
Run Code Online (Sandbox Code Playgroud)

然后从计划任务中调用该页面。可以是服务器或任何机器上的计划任务。为此使用 .vbs:

发送电子邮件.vbs:

''//Force the script to finish on an error.
On Error Resume Next

''//Declare variables
Dim objRequest
Dim URL

Set objRequest = CreateObject("Microsoft.XMLHTTP")

''//Put together the URL link appending the Variables.
URL = "http://www.mysite.com/system/sendemails"

''//Open the HTTP request and pass the URL to the objRequest object
objRequest.open "POST", URL , false

''//Send the HTML Request
objRequest.Send

''//Set the object to nothing
Set objRequest = Nothing
Run Code Online (Sandbox Code Playgroud)