Sendgrid API:如何发送包含单个模板数据的批量电子邮件?

问题描述

请求的行为:

我想一起使用Sendgrid和Firestore Cloud功能发送大量电子邮件。电子邮件应根据收件人显示一些单独的用户数据(例如,用户ID和用户名)。

当前状态

我创建了一个可运行的云功能。它从firestore获取用户数据,并使用sendgrid API将电子邮件发送到给定的电子邮件地址。

问题

但是,它将所有用户的ID发送到每个电子邮件地址,而不是仅发送属于某个订户的ID。示例:

我的Firestore集合中有3个具有3个ID的订户: “ abc”,“ pqr”,“ xyz”

功能应该发送三封电子邮件包括属于电子邮件地址的ID。相反,该函数现在会向每个地址发送“ abcpqrxyz”。

我的云功能

export const sendAllEmails = functions.https.onCall(async (event) => {

  const subscriberSnapshots = await admin.firestore().collection('subscribers').get();

  const emails = subscriberSnapshots.docs.map(snap => snap.data().email);
  const ids = subscriberSnapshots.docs.map(snap => snap.id);

  const individualMail = {
    to: emails,from: senderEmail,templateId: TEMPLATE_ID,dynamic_template_data: {
        subject: event.subject,text: event.text,id: ids // sends all ids to everyone instead of a single id in every mail
  }

  await sendGridMail.send(individualMail);
  return {success: true};
});

我是否需要遍历电子邮件和ID,或者SendGrid API对此行为是否具有更智能的实现?

解决方法

您必须通读这些元素中的每一个以获取值并构造对象。

也许参数没有正确包含在请求的正文中。请注意,个性化对象包含为每封邮件提供的数据。

https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/#send-a-transactional-email

pygame.error: Couldn't open soccer.png