在不知道sendgrid中他们的电子邮件的情况下将模板发送给多个人

时间:2019-05-08 08:31:25

标签: javascript firebase google-cloud-functions sendgrid

我需要向多个我不认识的电子邮件用户发送电子邮件。

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)

数据库:

enter image description here

我需要将收件人的电子邮件数组添加到TO

1 个答案:

答案 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
    });
  });

除了代码中的注释外,您还应注意以下几点:

  1. 通过执行.onCreate(event => {}),您正在使用旧语法(对于Cloud Functions版本= v0.9.1)。您应该修改代码(至.onCreate((snap, context) => {}))并更新您的库,请参见https://firebase.google.com/docs/functions/beta-v1-diff
  2. 我们返回由Sendgrid的send()方法返回的承诺。我建议您观看Firebase视频系列中的有关“ JavaScript Promises”的3个视频:https://firebase.google.com/docs/functions/video-series/,以了解为什么这真的很重要。