处理邮件请求和消息的最佳方式

本文关键字:最佳 方式 消息 求和 请求 处理 | 更新日期: 2023-09-27 18:17:42

我正在构建一个MVC应用程序,在这个应用程序中有暗示一些事情的动作。因此,我们希望使用邮件系统警告我们的客户/用户。我正在构建一个本地应用程序和一个网络商店,所以有时我需要发送很多邮件。

我目前使用MvcMailer为什么很好地完成了它的工作,但我主要担心的是,由于它发生在正常的方法调用期间(例如:操作的结果),那么:

        MvcMailMessage msg = mailer.NewOrder(emailTo);
        msg.Send();

消息是,这需要一段时间。由于这种操作可能会被调用很多次,它会减慢整个进程,这是我不希望的。

所以我的问题是:我应该如何处理邮件?我是否可以使用一种异步的东西来完成这项工作?我是否将它们存储在数据库表中并有时发送它们?我听说过windows .Net中的Task,但我从来没有使用过,这是一个选项吗?

我正在寻找建议,所以请随意分享你的意见!谢谢你!

处理邮件请求和消息的最佳方式

可以使用async-await关键字来使用SmtpClient.SendMailAsync

public async Task SendSmtpMailAsync()
{
    SmtpClient smtpClient = new SmtpClient();
    MailMessage mailMessage = new MailMessage("FromAddress", "ToAddress", "Subject", "Body");
    await smtpClient.SendMailAsync(mailMessage);
    // Possibly do more stuff here.
}

当您在异步方法上设置await时,控制权将返回给调用方。这意味着ASP。. NET可以在此期间使用返回到ASP . NET的线程处理消息. NET线程池从同一方法。当方法完成后,它将返回到等待行并继续执行。

请注意,单独使用async不会将请求返回给调用者,它只会让您同时处理更多请求。您可以做的是将此方法与生产者-消费者风格的集合(如BlockingCollection<T>)相关联,将消息添加到其中并将响应返回给调用者。在后台,使用SendMailAsync执行这些请求