繁体   English   中英

运行后台任务以在用户发布到ASP.NET CORE中的讨论区时发送电子邮件

[英]Running a background task for sending emails when a user posts to a discussion board in ASP.NET CORE

我需要通过SMTP向讨论板的所有订户发送电子邮件。 如果有很多订户(例如1000多个),我不希望发布新帖子的用户在发送通知电子邮件时必须等待。

起初我以为我可以使用: System.Net.Mail.SmtpClient.SendMailAsync

但是,正如这篇文章所解释的那样“异步并不是使操作更快返回响应的魔杖。您的任务(在这种情况下,发送电子邮件)需要花费的时间,无论是否同步,操作都不会返回直到任务完成为止。” 异步更多地是关于提高线程的效率,而不是使任务更快地运行。

首先,我对SendMailAsync的研究正确吗? 我认为这不是正确的解决方案。

第二,实现目标的方法是什么? 后台任务 我听说过Hangfire 我需要使用像Hangfire这样的东西吗? 还是可以仅使用AJAX呼叫发送电子邮件?

顺便说一句,我正在使用ASP.NET Core和.NET Framework 4.6.1

使用在单独服务器上运行的消息队列服务(例如RabbitMQ或AWS SQS)怎么样? 然后向该服务器发布一条消息,其中包含需要完成的操作的详细信息(在本例中为发送给谁),然后消息服务可以在闲暇时将消息从队列中拉出,进行处理(发送1000封电子邮件)然后从队列中取出下一件事。

我在类似情况下使用了Hangfire。 这是我的实现方式。

  1. 将要发送的电子邮件列表存储在数据库中。
  2. 使用hangfire在后台处理电子邮件。

您可以使用单独的队列/服务器进行处理。 为我做了工作。

使用Hangfire在ASP.net中的后台处理中查看此帖子

此外,在实施之前,请仔细阅读hangfire最佳做法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM