我一直在用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();
}此外,我只希望这些电子邮件是个人发送的,我不想使用复印件,因为我在其他地方使用这一点,使每一封电子邮件的变化。你有什么想法吗?这对我来说意义重大。
发布于 2015-07-30 02:30:54
您的函数正在执行一个异步网络请求(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指南将其重写为一组并行的Promises。
https://stackoverflow.com/questions/29496654
复制相似问题