2014-01-28 109 views
1

好的,所以我試圖通過電子郵件每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格式化電子郵件? –

回答

1

我做了類似的事情。但我只是使用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