【发布时间】:2017-08-29 20:51:47
【问题描述】:
现在我们的 asp.net 网站是手动发送发票,是否可以每 5 分钟自动向客户发送电子邮件?所有发票都是使用软件存入SQL Server数据库,存入数据库后,需要发送到不同的客户电子邮件地址,并附上PDF文件。这意味着代码需要每 5 分钟从数据库中收集新的发票信息并发送。然后创建一个日志文件,包括发送到会计的成功和不成功的发票。
我可以使用任务调度程序或 Windows 服务吗?
【问题讨论】:
现在我们的 asp.net 网站是手动发送发票,是否可以每 5 分钟自动向客户发送电子邮件?所有发票都是使用软件存入SQL Server数据库,存入数据库后,需要发送到不同的客户电子邮件地址,并附上PDF文件。这意味着代码需要每 5 分钟从数据库中收集新的发票信息并发送。然后创建一个日志文件,包括发送到会计的成功和不成功的发票。
我可以使用任务调度程序或 Windows 服务吗?
【问题讨论】:
创建一个名为 CronMail.aspx 的页面并在加载事件中发送电子邮件(我使用一些伪代码来解释这个想法):
void Page_Load(object source, EventArgs e)
{
//1. Check that more than 5 minutes happened before last sent
DateTime lastSent = ...;
if (DateTime.Now().Substract(lastSent).Minutes < 5)
return;
//2. Get your invoices and PDF files
var dataToSent = ...;
//3. Send your invoices
foreach(var item in dataToSent)
{
//4. Save sent date every time to avoid resending in case the whole operation takes more than 5 minutes
saveSentTime();
//5. Finally send your data
}
}
然后您可以使用 Windows 任务调度程序每 5 分钟调用一次您的 URL:http://your_website/CronMail.aspx
这里是一个例子:https://superuser.com/questions/447368/set-windows-scheduler-to-schedule-open-a-website-webpage-or-the-bookmark(使用 chrome 而不是 iexplorer)
【讨论】:
Hangfire 库是一个完整的后端作业调度程序和后台处理器,运行在最新版本的 ASP.NET 之上。它可以自行运行(需要特殊的 IIS 应用程序池配置 - “AlwaysRunning”),无需外部网页 ping 或任务调度程序。您可以安排许多作业以每分钟一次的频率运行。
我已经取得了很多成功。
【讨论】: