从Firebase Firestore向多个收件人Node JS发送SendGrid多封电子邮件

时间:2020-02-27 15:31:27

标签: node.js firebase google-cloud-functions sendgrid sendgrid-api-v3

我正在使用SendGrid和Firebase函数将多个电子邮件发送给多个收件人。我使用的代码在发送到包含4个电子邮件地址的测试列表时可以正常工作,但是在尝试发送到4,000个电子邮件地址时却无法工作。也没有来自SendGrid的错误消息。

如果注释了SendGrid代码块,此代码也可以工作并返回打印在控制台中的电子邮件地址列表。 你知道怎么回事吗?

谢谢

exports.adminSendGroupMessage = functions.region('europe-west2').https.onCall((data, context) => {
  const emailHTMLData = emailHTMLData;

  var emailDataArray = [];

          //Fetch contacts list
          let testContactsRef = db.collection('contacts-list');
          return testContactsRef.get().then(snapshot => {
              snapshot.forEach(doc => {
                // console.log(doc.id, '=>', doc.data());
                console.log("Fetched contact with ID: " + doc.id);

                //Extract contact data
                const firstName = doc.data().name || "";
                const surname = doc.data().surname || "";
                const emailAddress = doc.data().emailAddress;

                var emailData =  {
                  to: emailAddress,
                  from: 'fromEmail@email.com',
                  subject: messageSubject,
                  text: 'Email for ' + firstName,
                  html: emailHTMLData,
                  customArgs: {
                    ref: 'msg-ref'
                  },
                }

                    //Add new email data to the array
                    emailDataArray.push(emailData);
              });

              return Promise.all(emailDataArray).then(results => {

                  //Send emails with all data once contact fetch complete
                console.log("Success fetching contacts - send emails.");
                sendGridGroupMessages(emailDataArray);
                return { success : true, message: "Success sending emails" };

            })

});

function sendGridGroupMessages(emailDataArray) {
  console.log('Send emails to group function with data: ' + emailDataArray.length);

  var i,j, splitArray,chunk = 998;
  for (i=0,j=emailDataArray.length; i<j; i+=chunk) {
      splitArray = emailDataArray.slice(i,i+chunk);
      // do whatever
      //Send emails
    sgMail.send(splitArray, (error, result) => {
      if (error) {
        //Do something with the error
        console.log("Error sending group emails: " + error);
        // throw new functions.https.HttpsError('internal', 'There was an error sending the group emails - ' + error.message + ' (' + error.code + ')');
      } else {
        //Celebrate
        console.log("Success sending group emials: " + JSON.stringify(result));
        // return { success : true };
      }
    });
  }

1 个答案:

答案 0 :(得分:0)

您必须发布错误日志 如果没有错误,则表示他们已发送 但是请检查SendGrid活动以查看这些电子邮件发生了什么

相关问题