我需要向多个我不认识的电子邮件用户发送电子邮件。
exports.sendgridMail =
functions.database
.ref('/inviteNewMembers/{id}/recipients/{email}')
.onCreate(event => {
sgMail.setApiKey('api key');
const msg = {
to: ['recipient1@example.org', 'recipient2@example.org'],
templateId: 'template',
dynamic_template_data: {
subject: 'invited_team_name',
text: 'link_to_onboarding'
}
};
sgMail.send(msg)
数据库:
我需要将收件人的电子邮件数组添加到TO
答案 0 :(得分:0)
我了解您希望在每次向该节点添加新电子邮件时都向/inviteNewMembers/{id}/recipients/
节点下的所有电子邮件发送邮件(例如,将recipients
节点的新子节点添加到该节点)创建)。
以下代码可以解决问题:
exports.sendgridMail = functions.database
.ref('/inviteNewMembers/{id}/recipients/{email}')
.onCreate((snap, context) => {
emailsRef = snap.ref.parent; //We define the Reference of the parent node
return emailsRef.once('value').then(dataSnapshot => { // We read the values of the parent node
const emailsArray = [];
dataSnapshot.forEach(childSnapshot => {
emailsArray.push(childSnapshot.val());
});
console.log(emailsArray);
const msg = {
to: emailsArray,
templateId: 'template',
dynamic_template_data: {
subject: 'invited_team_name',
text: 'link_to_onboarding'
}
};
return sgMail.send(msg); //Very important: we return the promise returned by the send() method
});
});
除了代码中的注释外,您还应注意以下几点:
.onCreate(event => {})
,您正在使用旧语法(对于Cloud Functions版本= v0.9.1)。您应该修改代码(至.onCreate((snap, context) => {})
)并更新您的库,请参见https://firebase.google.com/docs/functions/beta-v1-diff send()
方法返回的承诺。我建议您观看Firebase视频系列中的有关“ JavaScript Promises”的3个视频:https://firebase.google.com/docs/functions/video-series/,以了解为什么这真的很重要。