我希望使用sendgrid模板发送帐户密码重置电子邮件。
所以基本上不使用函数Accounts.sendResetPasswordEmail
而是需要函数Accounts.getResetPasswordURL
这将给我一个密码重置URL,我可以用它发送到将在模板中使用的sendgrid。
那我该怎么做呢?我如何使用Meteor来获取密码重置URL但实际上不发送电子邮件?我将使用对sendgrid的API调用手动发送带有URL的电子邮件。
答案 0 :(得分:1)
注意:我没有使用过sendgrid,所以我要去API over here。
首先,您要将Meteor配置为使用Sendgrid's SMTP servers。这样,您就可以直接通过Meteor发送电子邮件:
Meteor.startup(function(){
process.env.MAIL_URL = "smtp://" + sendgridUsername + ":" + sendgridPasswordOrAPIkey + "@smtp.sendgrid.net:465";
});
您可以更改重置电子邮件的默认模板。这可以通过修改Accounts.emailTemplates
:
Accounts.emailTemplates.resetPassword.html = function(user, url){
// url contains the reset url! :)
var result;
var sendgridTemplateId = ''; // Set this to the template id you're using in sendgrid
try {
// Get sendgrid template
// API link: https://sendgrid.com/docs/API_Reference/Web_API_v3/Template_Engine/templates.html
result = HTTP.get("https://api.sendgrid.com/v3/templates/" + sendgridTemplateId);
result = result.data.templates[0].versions[0].html_content;
// then insert URL to the template
} catch (error) {
console.error('Error while fetching sendgrid template!', error);
return false;
}
return result;
};
现在当你使用Accounts.sendResetPasswordEmail()
时,将使用上面的模板,它实际上只是获取sendgrid模板并返回它!
答案 1 :(得分:0)
目前执行该程序的方式实际上是不可能的。
accounts-password
包生成随机令牌,并以sendResetPasswordEmail()
方式发送电子邮件。
您可以分叉包,按照完成in the original method的方式生成自己的令牌,或者更改email包的行为以自行处理电子邮件。