使用 c# 发送计划的电子邮件



我正在开发电子邮件活动模块,用户可以在其中创建具有一些标准选择的电子邮件活动,并可以向数千名用户发送电子邮件。

目前,我找到了以下两种实现方式,但需要知道哪种方法更好使用:

1(第一个Windows服务以n分钟的间隔检查数据库,并在符合条件的电子邮件活动的电子邮件队列表中插入数据,第二个服务不断从队列中获取大约1000条记录并发送它们。

2(在Web应用程序中,在应用程序启动时,获取创建的所有电子邮件活动,并使用石英(或任何其他后台作业助手(安排它们,以在定义的时间执行(生成队列以及发送电子邮件(。在这种方法中,我相信它可能会创建内部线程,会影响Web应用程序的工作吗?

方法#1:与系统分离。应用程序本身没有负载。但请定期清除数据库。对电子邮件表使用唯一标识符 ID,而不是标识,以便清除数据不会导致间歇性号码丢失。您应该只将电子邮件模板保留在数据库中。在运行时将其绑定到数据并发送邮件。这取决于要求,但您是否需要始终为活动数据库中的每个人保留已发送的邮件。

方法#2:在任何情况下,它都会对Web应用程序的内存消耗产生影响,并可能减慢应用程序的速度。是有多个服务器还是一个服务器?如果有多个,他们是否会处理相同的数据并为相同的东西发送多封邮件。实例之间将如何同步。您可能需要在实例之间对数据进行分区。或者,他们是否还会在运行时使用 SQL 数据库来获取要处理的数据。如果只有服务器,无论如何它都会运行而不会出现问题。

如果数据库中有可用的数据,则还可以计划在电子邮件中不需要格式化时使用 SQL 数据库。SQL 作业将更好地处理它。

此外,您可以通过多次通过Windows任务调度程序运行的Powershell脚本/windows exe来执行此操作,该脚本连接到数据库并发送邮件。

您还可以使用 Hangfire 在 .net 中进行后台处理。保持较低的后台内存消耗,并使用适当的错误处理。

https://www.hangfire.io/

除非有一些操作/业务内容会使 #1 变得痛苦,否则我会选择 #1,因为以下原因......

  • 如果商务人士希望更改电子邮件格式(例如,将徽标放在左侧而不是右侧,将取消订阅文本设置为蓝色而不是绿色......(,创建活动的人将不会遇到任何停机时间。

  • 如果创建针对大量用户的活动,则创建广告系列的人不会减慢速度。

  • 如果您想调整发送电子邮件的选项(例如,使用负载分配,使用不同的服务器来处理不同的东西等(,则不必通过部署具有新调整的Web应用程序的新版本来中断应用程序用户

扬子晚报

最新更新