未通过Mandril&发送超过9封电子邮件解析云码

时间:2015-04-07 16:38:50

标签: javascript email parse-platform mandrill cloud-code

我在使用mandrill发送电子邮件模板时遇到了问题。我现在的设置是在解析服务器上的javascript,该服务器设置有后台作业,每天使用mandrill的api向每个用户发送一次电子邮件。 我在发送大量电子邮件时遇到了一个问题,由于某种原因,我无法让mandrill一次发送超过9个电子邮件模板,需要发送超过400个。这应该不是问题因为我已经通过这个帐户发送电子邮件一段时间并且有良好的声誉。 我尝试在电子邮件中加入延迟,并在发送模板时更改选项,例如让它们发送异步。但是无济于事只能发送9个。

exports.FunctionSentDripEmailTemplateFour = function (user,TempateNum,isLastEmail,status,testing){
    var mandrillKey = 'my-key';
    var Mandrill = require('mandrill');

    if(testing){ // send the email to me if testing
        EmailParams.message.to[0].email = 'test@email.com'; 
        EmailParams.message.merge_vars[0].rcpt = 'test@email.com';
    }else{
        EmailParams.message.to[0].email = user.get('email'); 
        EmailParams.message.merge_vars[0].rcpt = user.get('email');
    }

    EmailParams.message.subject="Subject";
    EmailParams.template_name = "Template name";
    EmailParams.template_content[0].name = "Template content name";

    //console.log("T: " + TempateNum + " M: " + EmailParams.message.to[0].email);
    Mandrill.initialize(mandrillKey);
    Mandrill.sendTemplate(EmailParams, function(res) {
        console.log(res);
    }, function(err) {
        console.log(err);
    });

    if(isLastEmail == true){
        //(finishes the parse job function)
        if(testing){
            status.success("Test Email Job completed successfully.");
        }else{
            status.success("Email Job completed successfully.");
        }
    }
    return new Parse.Promise(); 
}

此外,我只希望亲自发送这些电子邮件,我不想使用碳副本,因为我在其他地方使用此副本并对每封电子邮件进行更改。 你有什么想法?这对我来说意义重大。

1 个答案:

答案 0 :(得分:0)

您的函数正在执行异步网络请求(Mandrill.sendTemplate()),但它会立即返回而不等待此调用完成。

看起来你正在中途使这个功能按预期运行。您应首先初始化Parse.Promise,并在函数末尾返回该promise对象。反过来,当Mandrill代码完成时,应该解决这个承诺。

exports.FunctionSentDripEmailTemplateFour = function (user,TempateNum,isLastEmail,status,testing){
var mandrillKey = 'my-key';
var Mandrill = require('mandrill');

if(testing){ // send the email to me if testing
    EmailParams.message.to[0].email = 'test@email.com'; 
    EmailParams.message.merge_vars[0].rcpt = 'test@email.com';
}else{
    EmailParams.message.to[0].email = user.get('email'); 
    EmailParams.message.merge_vars[0].rcpt = user.get('email');
}

EmailParams.message.subject="Subject";
EmailParams.template_name = "Template name";
EmailParams.template_content[0].name = "Template content name";

var promise = new Parse.Promise()
//console.log("T: " + TempateNum + " M: " + EmailParams.message.to[0].email);
Mandrill.initialize(mandrillKey);
Mandrill.sendTemplate(EmailParams, function(res) {
    console.log(res);
    promise.resolve(res);
}, function(err) {
    console.log(err);
    promise.reject(err);
});

// commented out isLastEmail block - I am not sure this is the right place for that functionality

return promise; 
}

您现在可以执行以下操作:

FunctionSentDripEmailTemplateFour(user,templateNum,isLastEmail,status,testing).then(function(result) {
    status.success("One email sent successfully");
}, function(err) {
    status.error("Failed to send email");
});

重写此代码以发送多封电子邮件留给读者练习。您应该能够按照Parse的Promises指南将其重写为一组并行的承诺。