替代无法通过Firebase功能在发送网格中工作

时间:2018-10-22 16:32:47

标签: javascript firebase google-cloud-functions sendgrid

我无法将substitutions数据添加到通过Firebase Cloud Functions从Sendgrid发送的电子邮件中。

这是我的function

exports.firestoreEmail = functions.firestore
.document('users/{id}')
  .onCreate(snap => {
    const user = snap.data();
    const msg = {
      to: user.email,
      from: 'example@example.com',
      subject: `${user.firstName}, please Verify Your Email Address`,
      templateId: 'templateID',
      substitutionWrappers: ['{{', '}}'],
      substitutions: {
        firstName: user.firstName,
        email: user.email,
        id: user.id
      }
    };
    return sgMail
      .send(msg)
      .then(() => console.log('email sent!'))
      .catch(err => console.log(err));
  });

templateId事务性模板是

<html>
  <head></head>
  <body>{{firstName}} - {{email}} - {{id}}</body>
</html>

这将按预期方式向user.email发送一封电子邮件,但在substitutions数据应保留的地方留有空白。

按照文档和用例here,我也尝试添加

sgMail.setSubstitutionWrappers('{{', '}}');

全局setSubstitutionWrappers。仍然不起作用。

我还有console.log(user),它返回要传递到控制台中的substitutions的数据。

我想念什么?数据可用,电子邮件格式正确,并且功能完全符合SendGrid案例。

1 个答案:

答案 0 :(得分:2)

几个小时后,我设法弄清了这一点,意识到substitutionssubstitutionWrappers是为 Legacy Transactional Templates 设计的。

对于v3 API ,您应该使用dynamic_template_data而不是substitutions,并且substitutionWrappers似乎设置为车把{{ }}

  dynamic_template_data: {
    firstName: user.firstName,
    email: user.email,
    id: user.id
  }

下次,我将确保阅读并且不会浏览文档……很可能不会。