更新:完整教程在这里。
您可以使用服务器控制器和一些npm软件包在普通应用中立即执行此操作。
我知道的将调度邮件集成到节点应用程序中的两个最佳软件包是node-schedule和mailgun-js。
您将需要3个功能:一个mailSender功能,一个userSearch功能和一个scheduler功能。
您的mailgun电子邮件功能非常简单:
var mailSender = function (user, subject, html, callback) {
var mailgun = new Mailgun({apiKey: mailgun_api, domain: mailgun_domain});
var data = {
from: 'mail@yourdomain.com',
to: user.email,
subject: subject,
html: html,
// nifty test mode flag
// 'o:testmode': true
};
mailgun.messages().send(data, function (err, body) {
//handle errors and body
});
};
Run Code Online (Sandbox Code Playgroud)
这将向user.email您传递给该功能的电子邮件发送一封电子邮件。该html可以是内联模板或文件的路径。
现在,您要查找有生日(或其他事件)的用户。最好的方法是使用猫鼬find()查询,并从用户模型中传递一个参数,并将变量设置为等于今天的日期。您的userSearch函数应包含以下内容(请记住它是asnyc,因此您将需要回调或保证将数据传递给另一个函数):
User.find().where('birthday').equals(today).exec(
function(err, user){
var users = [];
// handle error
if (err) return console.log(err);
for (var i = user.length - 1; i >= 0; i--) {
users.push(user[i]);
}
return users;
});
Run Code Online (Sandbox Code Playgroud)
使用node-scheduler包计划也很简单。您通过了一条规则,只要您的应用程序正在运行,它就会启动。规则如下所示:
var rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [new schedule.Range(0, 6)];
rule.hour = 12;
rule.minute = 30;
Run Code Online (Sandbox Code Playgroud)
您的规则是每天下午12:30触发。然后,您将规则传递给scheduleJob方法:
// fire your scheduled task given the rules above
var j = schedule.scheduleJob(rule, function(){
// whatever function you want the job to trigger
}
Run Code Online (Sandbox Code Playgroud)
您上面的userSearch函数可能会结合您的函数和您的mailSender函数。请记住,您userSearch是异步的,因此您将需要使用回调或Promise将用户数据传递到sendMailer函数中。
专家提示:
MEAN附带Swig来解析html模板,因此可以使用它来格式化电子邮件。像这样:
var email = swig.renderFile('app/views/templates/email.inlined.template.html', {
//pass in your template variables
});
Run Code Online (Sandbox Code Playgroud)
并将其传递给您的mailSender函数。
| 归档时间: |
|
| 查看次数: |
1667 次 |
| 最近记录: |