Отправка шаблона нескольким людям, не зная их электронной почты в sendgrid - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно отправить электронное письмо нескольким пользователям, чья электронная почта мне неизвестна.

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 голосов
/ 08 мая 2019

Я понимаю, что вы хотите отправлять почту на все электронные письма в узле /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 => {}) вы используете старый синтаксис для версий облачных функций <= v0.9.1.Вам следует изменить свой код (на <code>.onCreate((snap, context) => {})) и обновить библиотеки, см. https://firebase.google.com/docs/functions/beta-v1-diff
  2. Мы возвращаем обещание, возвращенное методом send() Sendgrid.Я бы посоветовал вам посмотреть 3 видео о «Обещаниях JavaScript» из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/,, чтобы понять, почему это действительно важно.
...