如何在不延迟ASP.NET响应的情况下发送电子邮件?

时间:2013-02-21 13:02:01

标签: asp.net asp.net-mvc

我尝试了很多变体来快速将响应返回给用户并在后台发送电子邮件但失败了。这是我尝试过的一个样本,

ThreadPool.QueueUserWorkItem(callback => 
                // It is important to put this line inside try catch otherwise it might crash the process 
                client.SendAsync(message, message)
                );

当我在client.SendAsync上设置断点时,在执行此行之前,不会向用户发送任何respose。那么在不等待响应的情况下,在后台发送电子邮件的正确方法是什么。

更新:我认为我遇到了问题,实际上是VS调试器会停止asp.net线程(暂停),直到你逐步完成。上面的代码适用于我的场景。

3 个答案:

答案 0 :(得分:1)

您可以将电子邮件放入消息队列中,并在从该消息队列中读取的单独服务中处理实际发送的电子邮件。

答案 1 :(得分:1)

根据电子邮件的数量和大小,您也可以考虑将它们写入拾取文件夹。您可以使用本地IIS SMTP服务器通过智能主机中继邮件。在实践中,这对我们来说非常有效。

答案 2 :(得分:1)