首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有不需要HTTP上下文的MVC电子邮件包?

有没有不需要HTTP上下文的MVC电子邮件包?
EN

Stack Overflow用户
提问于 2012-05-30 15:14:28
回答 3查看 2.4K关注 0票数 11

我们从我们的ASP.NET MVC3 Razor Web应用程序发送电子邮件。

目前我们使用的是ActionMailer.NET。

我已经看过MvcMailer了。

两者的问题都是它们需要一个Http上下文才能执行。

这样做的问题是我想异步发送电子邮件。现在我知道您可以异步执行实际的发送(例如SMTP调用),但我希望发送电子邮件的整个过程都是异步的,例如:

代码语言:javascript
复制
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。

EN

回答 3

Stack Overflow用户

发布于 2012-05-30 15:24:19

你可以签出使用RazorViewEngine的postal

代码语言:javascript
复制
public class HomeController : Controller
{
    public ActionResult Index()
    {
        Task.Factory.StartNew(() =>
        {
            Thread.Sleep(5000);
            dynamic email = new Email("Example");
            email.To = "webninja@example.com";
            email.FunnyLink = "some funny link";
            email.Send();
        });

        return View();
    }
}

~/Views/Emails/Example.cshtml内部

代码语言:javascript
复制
To: @ViewBag.To
From: lolcats@website.com
Subject: Important Message

Hello,
You wanted important web links right?
Check out this: @ViewBag.FunnyLink

在将应用程序投入生产之前,还要确保您已经阅读并理解了dangers of implementing background tasks in ASP.NET applications

票数 1
EN

Stack Overflow用户

发布于 2012-07-21 12:26:31

ActionMailer.NET现在可以在MVC之外独立使用。

详细信息在这里介绍

http://geeksharp.com/2011/07/06/actionmailer-0-6-released/

票数 1
EN

Stack Overflow用户

发布于 2013-02-08 06:32:20

如果你使用的是.NET 4.5 (或者Async CTP,不管它是什么),你可能想看看async ActionMethods。坦率地说,我不确定确切的需求是什么(MVC3/4),但这篇文章应该会有所帮助。

我也不知道你为什么这么关心数据库查找所花费的时间--它真的做了那么多吗?

比SendAsync更好的解决方案:我不喜欢使用SendAsync,而是使用常规的send through an SMTP server方法,比如我正在使用的方法(注意:即使您使用IIS7来管理您的主IIS,也必须使用IIS6控制台)。一旦你的本地机器将电子邮件排入队列,而你不需要等待它被发送,它就会立即返回。也许更重要的是,如果有错误发送,它将继续为您重试。信不信由你--有时smtp.gmail.com不会响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10811604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档