在asp.net mvc 3中的后台作业/计划任务中发送电子邮件

Posted

技术标签:

【中文标题】在asp.net mvc 3中的后台作业/计划任务中发送电子邮件【英文标题】:Send emails in background job/scheduled task in asp.net mvc 3 【发布时间】:2011-07-06 19:06:29 【问题描述】:

我有一个 ASP.NET MVC 3 Web 应用程序托管在普通主机上,(即,没有自有或虚拟服务器),我希望能够将电子邮件存储在数据库中,并让它们在后台工作中提取和发送。

如果这是我自己的服务器,我会编写一个 Windows 服务来处理这个问题,但有什么方法可以在 Web 应用程序进程中实现/模拟计划任务/后台作业?

【问题讨论】:

您能透露这家托管公司的名称吗?我有一个类似的案例,我想使用调度任务。 @Zafrir - 这是 DiscountASP.net 【参考方案1】:

你可以看看Quartz.NET。有一个 blog post 告诉你如何让它在中等信任下运行。

【讨论】:

【参考方案2】:

您可以查看这篇文章 (https://blog.***.com/2008/07/easy-background-tasks-in-aspnet/),它解释了如何在不使用 windows 服务的情况下,在 asp.net 或 asp.net mvc 中运行计划任务。

【讨论】:

嘿 sarvesh,我不久前读过这篇文章,但我有点厌倦了走同样的路。我不知道,如果我从缓存启动的工作中发送数百封电子邮件,我会不会阻塞应用程序? 它不会在您发送电子邮件时保留您的 asp.net 请求。您多久发送一次这些电子邮件?如果您担心服务器上的负载,您可以小批量发送它们吗? @sarvesh:依靠 asp.net 来托管重复执行的代码(根据您提供的文章)是不可靠的 - 如果您的 asp.net 应用程序空闲一段时间(没有用户,没有http请求),它将回收它创建的所有线程并自行回收,直到下一次请求其任何资源。一般来说,cron 或 Quartz.net 是实现 Sergi 想要实现的目标的理想选择。但是在“有限”托管的情况下,唯一真正的选择是使用一种在线服务,该服务根据用户设置的时间表定期向用户的网页或存储过程发出 http 请求。时间【参考方案3】:

您也可以使用工作现金:

 HttpContext.Current.Cache.Add("jobkey",  
                         "jobvalue", null,  
                         DateTime.MaxValue,  
                         TimeSpan.FromSeconds(15), // set the time interval  
                         CacheItemPriority.Default, JobCacheRemoved); 

详情请见this

【讨论】:

以上是关于在asp.net mvc 3中的后台作业/计划任务中发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC计划任务实现方法(定时执行某个功能)

将 CurrentUICulture 传递给 ASP.NET MVC 3.0 中的异步任务

ASP.NET MVC5+EF6+EasyUI 后台管理系统(84)-Quartz 作业调度用法详解一

Centos进程作业管理与计划任务

Ktor 中的后台任务,例如 ASP.Net Core 中的“托管服务”

带有进度通知的长时间运行的后台任务