2014-01-28 17 views
1

Хорошо, поэтому я пытаюсь отправить запланированные напоминания о деятельности по электронной почте каждые 30 минут (если они запланировали мероприятие), и у меня есть работа кварца и рабочий MvcMailer, У меня возникают проблемы с получением Quartz.Net для использования MvcMailMessages.MvcMailer и Quartz.Net httpContext is null

Ошибка, которую я получаю: значение не может быть пустым. Имя параметра: httpContext

Как я могу это сделать? Я много раз искал, но не смог найти ничего, что сработало. У меня есть свой Планировщик, начинающийся с Application_Start() в Global.asax.cs

Я мог бы просто вернуться к использованию электронной почты по умолчанию, а затем каким-то образом отформатировать мое сообщение по-разному со всеми Htmlz! Но я бы предпочел не тратить время на это.

Любая помощь будет оценена по достоинству.

+0

Вы можете разместить соответствующий код? – rae1

+1

Я полагал, что Quartz.net работает в своей собственной теме. И поэтому ваш HttpContext имеет значение null, поскольку он не работает в потоке, на котором работает MVC. Что именно вы пытаетесь сделать? Почему вы хотите, чтобы HttpContext форматировал электронную почту? –

ответ

1

Я сделал что-то подобное. Но я просто использовал Quartz.NET для «поп» URL-адреса контроллера, который затем может отправить электронное письмо.

У вас есть работа и триггер, которые вы можете планировать в Quartz.Net.

Создайте контроллер на своем сайте MVC, который может отправлять ваши письма. Someting like 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

Надеется, что это помогает направлять вас немного. Ключевым выводом является то, что здесь задействован 2 процесса. Ваш сайт, а затем вторичный процесс, на котором будет присутствовать Quartz.Net. По сути, вам нужно получить запрос, чтобы вернуться через конвейер asp.net, чтобы ваш HttpContext снова был действительным.

Некоторые дополнительные вещи можно найти в моем ответе здесь о правильно Асинхронный отправки сообщений электронной почты через MvcMailer:

Send async e-mails