node js - 使用SendGrid在特定时间发送每日电子邮件

时间:2016-07-19 03:55:37

标签: node.js sendgrid

我正在寻找一种使用sendgrid在特定时间发送每日电子邮件的方法。我找到了只安排一次的方法,但我每天都需要这样做。即每天中午12点发送电子邮件。

这不仅仅是针对用户。那些选择接收每日电子邮件选项的人将收到一封电子邮件。

这是一个场景。 1.用户登录 2.导航到选项页面 3.选择一个选项以获取有关用户特定更新的每日电子邮件。

假设有20人选择接收电子邮件。在我的后端,我可以创建一个API来从db获取每个用户的数据,看看他们是否收到每日电子邮件。我可能会获取所有用户的电子邮件地址并通过电子邮件发送给他们。

但我的问题是我如何让我的后端每天在特定时间运行api。 我在客户端使用AngularJS。

2 个答案:

答案 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