我正在寻找一种使用sendgrid在特定时间发送每日电子邮件的方法。我找到了只安排一次的方法,但我每天都需要这样做。即每天中午12点发送电子邮件。
这不仅仅是针对用户。那些选择接收每日电子邮件选项的人将收到一封电子邮件。
这是一个场景。 1.用户登录 2.导航到选项页面 3.选择一个选项以获取有关用户特定更新的每日电子邮件。
假设有20人选择接收电子邮件。在我的后端,我可以创建一个API来从db获取每个用户的数据,看看他们是否收到每日电子邮件。我可能会获取所有用户的电子邮件地址并通过电子邮件发送给他们。
但我的问题是我如何让我的后端每天在特定时间运行api。 我在客户端使用AngularJS。
答案 0 :(得分:1)
您可以使用CronJob。类似的东西。
function registerEmailSendingJob() {
var job = new CronJob({
cronTime: '0 12 * * *',
onTick: function() {
// send emails
},
start: false,
timeZone: 'Asia/Kathmandu' // put your timezone
});
job.start();
}
答案 1 :(得分:0)
如果您希望立即进行API调用,SendGrid可以通过scheduling parameters为您处理此问题。
或者,如果您使用的是v3邮件发送端点,则更容易;只需使用export const UpdateMaterial = new ValidatedMethod({
name: 'material.update',
validate: new SimpleSchema({
id: {type: String},
description: {type: String},
}).validator(),
run({id, description}){
const _id = new Meteor.Collection.ObjectID(id);
let res;
if(Meteor.isServer) {
res = Materials.update({_id}, {
$set: {
'metadata.description': description
}
});
}
SendHTMLEmailToRoles(Titles.NewMaterial,Texts.NewMaterial, [Roles.Admin]);
return res;
}
});
export const SendHTMLEmailToRoles = (subject,html,roles) => {
if(Meteor.isServer) {
const users = Meteor.users.find({role: {$in: roles}}).fetch();
const addresses = users.map(function(user){
if(!user.emails)
return;
return user.emails.pop().address;
});
Email.send({
to: addresses,
from: 'test@test.com',
subject,
html
});
}
}
参数:https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html