0

好的,所以我尝试每 30 分钟通过电子邮件发送计划的活动提醒(如果他们安排了活动),我有 Quartz 的东西和 MvcMailer 工作人员,但是,我无法让 Quartz.Net 到使用 MvcMailMessages。

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

我怎么能做到这一点?我做了很多搜索,但找不到任何有效的东西。我的调度程序从 Global.asax.cs 的 Application_Start() 开始

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

任何帮助将不胜感激。

4

1 回答 1

1

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

拥有可以在 Quartz.Net 中安排的作业和触发器。

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

为您要发送的每种电子邮件类型设置一个 ActionMethod。

EmailController.SendWelcomeEmail(int id)

在您的操作方法中,查询您的数据库,执行任何逻辑,并最终调用您的 MVCMailer 以发送电子邮件。

要从 Quartz.Net 调用它,您可以使用 WebClient()

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

希望这有助于指导你一些。关键要点是这里涉及两个过程。您的网站,然后是托管 Quartz.Net 的辅助进程。本质上,您需要让请求通过 asp.net 管道返回,以便您的 HttpContext 再次有效。

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

发送异步电子邮件

于 2014-02-10T22:43:42.787 回答