我使用MVCMailer依赖于HttpContext来发送邮件。
在某些情况下,我从WebJob发送邮件,或者在调用ConfigureAwait(false)
的流中使用异步任务,因此在我点击MVCMailer代码之前我丢失了上下文。
我的选择似乎是:
ConfigureAwait(false)
(我的许多服务在某些时候使用Mailing,因此其中一个实例将删除我需要的上下文)我正在寻找快速简便的解决方案 - 如果需要,可以新建一个HttpContext。这可能吗?
这是我现在使用的代码,它依赖于HttpContext:
public class UserMailer : MailerBase {
public UserMailer() {
MasterName = "_Layout";
}
public virtual MvcMailMessage Message(MailMessage message, string unsubscribeLink = null) {
ViewBag.Body = message.Body;
ViewBag.Subject = message.Subject;
ViewBag.UnsubscribeLink = unsubscribeLink;
return Populate(x => {
x.ViewName = "Message";
});
}
}
答案 0 :(得分:0)
如果MvcMailer必须有一个HttpContext引用,我会抽象它。创建一个公共邮件接口或基类(看起来你现在已经使用MailerBase),如果你有:
public class WebJobMailer : MailerBase { .. }
然后你可以让webjob使用这个实现,但你的MVC应用程序是MvcMailer实现......然后WebJob邮件可以回退到System.Net.Mail,或者使用别的东西。