Мы отправляем электронные письма из нашего веб-приложения ASP.NET MVC 3 Razor.
В настоящее время мы используем ActionMailer.NET.
Я просмотрел MvcMailer.
Проблема с обоими заключается в том, что им нужен Http-контекст для выполнения.
Проблема в том, что я хочу отправлять электронные письма асинхронно. Теперь я знаю, что вы можете асинхронно выполнять фактическую отправку (например, вызов SMTP), но я хочу, чтобы весь процесс отправки электронной почты был асинхронным, например:
public ActionResult DoSomething(Something something)
{
_db.Save(something);
Task.Factory.StartNew(() => {
new MailController().DoSomething().Send(something);
});
return RedirectToAction("Index");
}
В методе «DoSomething» я снова запрашиваю базу данных, делаю другие вещи и т. д.... я хочу, чтобы все это было асинхронным - поэтому весь вызов заключен в задачу, а не просто делает .SendAsync()
. Надеюсь, это имеет смысл.
Вышеприведенный пример — это ActionMailer, и он ломается, потому что в порожденном потоке отсутствует контекст HTTP.
Кто-нибудь знает, как я могу заставить это работать, или, альтернативно, другой пакет, который не полагается на существование контекста HTTP?
Я не уверен, зачем нужен HTTP-контекст — здесь нет маршрутизации запросов, просто анализируется представление, которое находится в файловой системе, в HTML.