MvcMailer和Quartz.Net httpContext为null

问题描述:

好的,所以我试图通过电子邮件每30分钟发送一次计划的活动提醒(如果他们安排了一个活动),而且我有Quartz工作和MvcMailer工作人员,我无法让Quartz.Net使用MvcMailMessages。MvcMailer和Quartz.Net httpContext为null

我得到的错误是:值不能为空。参数名称:httpContext

我该怎么办?我做了很多搜索,但无法找到任何有效的工具。我有我的调度程序开始在Global.asax.cs的Application_Start()

我可以回到使用默认电子邮件,然后以不同的方式格式化我的消息与所有Htmlz!但我宁愿不花时间这样做。

任何帮助将greaaatly赞赏。

+0

您可以发布相应的代码? – rae1

+1

我相信Quartz.net是在自己的线程上运行。所以你的HttpContext是空的,因为它没有在运行MVC的线程上运行。你究竟想要完成什么?为什么你想要HttpContext格式化电子邮件? –

我做了类似的事情。但我只是使用Quartz.NET来“弹出”一个控制器的URL,然后可以发送电子邮件。

有一个工作和一个触发器,你可以在Quartz.Net中进行安排。

在您的MVC网站上创建一个可以发送您的电子邮件的控制器。有点像EmailController

有一个ActionMethod你想发送每个电子邮件类型。

EmailController.SendWelcomeEmail(int id) 

在你的操作方法,查询数据库,做任何逻辑,并最终调用您MVCMailer发送出去的电子邮件。

从Quartz.Net调用这个你可以使用Web客户端()

var client = new WebClient(); 
client.DownloadString("yourwebsitehere/Email/SendWelcomeEmail/99999"); 

如果你最终不得不扩展性问题,记得到ServicePointManager.DefaultConnectionLimit设置为高值。

http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=vs.110).aspx

希望这有助于引导你一些。关键是,这里涉及2个过程。您的网站,然后是主持Quartz.Net的辅助进程。基本上你需要获得通过asp.net pipline的请求,以便你的HttpContext再次有效。

一些额外的东西可以在这里我的回答可以找到有关正确异步通过MvcMailer发送电子邮件:

Send async e-mails