2010-09-03 92 views
9

我看postmarkapp.com处理使用.NET库,他们提供了从我的asp.net mvc的电子邮件的发送2应用程序:邮戳,DOTNET库ASP.Net MVC后台线程的电子邮件创建和发送

在他们documentation他们提到发送电子邮件瓦特/附件可能需要一些时间和更好的后台作业做到这一点。对于我的应用程序可以在任何地方从10到500个性化的电子邮件一些带有附件的批量我的用户发送。

  • 什么是非阻塞的方式来发起的创建和发送在ASP.Net MVC这些电子邮件的管理员用户这样做后台处理的最佳方式?

  • ,如果他们点击“创建和发送电子邮件” 500个用户,并关闭了浏览器之前该过程完成后会发生什么?

感谢您的帮助!新建ASP.Net MVC

回答

17

你可以生成一个新的线程,该线程中发送邮件:

[HttpPost] 
[Authorize(Roles = "Administrator")] 
public ActionResult SendMails() 
{ 
    new Thread(() => 
    { 
     // Send the emails here 
    }).Start(); 
    return View(); 
} 

如果用户关闭浏览器,直到它完成或在AppDomain关闭该线程将继续运行。该动作将立即返回一个视图,并且不会阻塞。

此外它可能是一个好主意,将一些标志设置到数据库中,发送电子邮件的操作正在运行,这样如果管理员在按钮上单击两次,用户就不会被大量邮件敲打。

如果你想更强大的解决方案,你可以看看MSMQ。而here's a tutorial这应该让你快速入门。

+0

任务>线程(如果.NET 4) – Necros 2010-09-03 22:39:08

+2

在控制器方法中发送电子邮件(打开线程)是一种不好的做法。它应该是一个静态类! – vlukham 2013-07-28 10:40:15

+0

为什么这是一个不好的做法? – 2015-12-29 01:31:15