发送网格替换不起作用

问题描述 投票:0回答:5

我只是想为 SendGrid 设置一封试用电子邮件,这是我第一次使用它,所以我确信这很简单,但我似乎无法获取要替换的占位符数据。

我正在使用这样的 NodeJS 库:

sgMail.setApiKey(mailConfig.apiKey);

const msgConfig = {
  to: email,
  from: mailConfig.defaults.from,
  templateId: mailConfig.templates.registrationConfirmation,
  substitutions: {
    '--displayName--': original.displayName,
    '--companyName--': 'Hello world'
  }
};

console.log('Sending: ', msgConfig);

// now send the registration confirmation email.
return sgMail.send(msgConfig).then(() => {
  console.log('done.');
})
.catch((err) => {
  console.error(JSON.stringify(err));
});

在模板中,有一个我使用可视化编辑器添加的文本块:

Hello --displayName--

We would love to take this opportunity to welcome you to the store.

from

--companyName--

但是,当我运行测试来发送电子邮件时,它可以正常发送邮件,但不会替换占位符。

我在这里缺少什么?

sendgrid sendgrid-templates
5个回答
8
投票

尝试将“替换”更改为“dynamicTemplateData”。看起来他们在新版本中改了名字。

我是怎么想出来的: https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/mail/USE_CASES.md


5
投票

Sendgrid 文档中不清楚,但我认为缺少这一行:

sgMail.setSubstitutionWrappers('--', '--'); // Configure the substitution tag wrappers globally

然后删除替换对象键中的破折号

看这个链接:Sendgrid

所以,你的代码应该是:

sgMail.setApiKey(mailConfig.apiKey);

// Configure the substitution tag wrappers globally
sgMail.setSubstitutionWrappers('--', '--');

const msgConfig = {
  to: email,
  from: mailConfig.defaults.from,
  templateId: mailConfig.templates.registrationConfirmation,
  substitutions: {
    'displayName': original.displayName,
    'companyName': 'Hello world'
  }
};
...

希望对您有帮助!


2
投票

对于不使用动态模板的人,请使用 Sendgrid 的帮助程序,如下所述:替换用例

重要提示:如果使用个性化助手,请不要忘记将您的

setSubstitutionWrappers
设置为个性化级别,如下所示
personalization.setSubstitutionWrappers(['%%', '%%'])

如果不使用个性化,只需在全局助手中设置即可:

import mailClient from '@sendgrid/mail';
mailClient.setSubstitutionWrappers('%%', '%%')

0
投票
const msgConfig = {
  to: email,
  from: mailConfig.defaults.from,
  templateId: mailConfig.templates.registrationConfirmation,
};

msgConfig.addSubstitution('%displayName%', 'Something to display');

当用户给定的变量周围有尖括号 <% ... %> 时,它们似乎不起作用,这些是为 <%body%> 和 <%subject%> 标签保留的。

现在您可以制作看起来像这样的模板 - %displayName%


0
投票

对于任何使用 V3 版本 Node.js 库的人来说,这都会有所帮助:

来自 Sendgrid Github 文档: node.js 库中默认的替换包装器是 {{ 和 }}

const message = {
  from: {
    email: "[email protected]",
  },
  personalizations: [
    {
      to: [
        {
          email: "your email",
        },
      ],
      substitutions: {
        name: "hamza",
      },
    },
  ],
  subject: "Default Subject",
  content: [
    {
      type: "text/html",
      value: "Hey {{name}}",
    },
  ],
};
© www.soinside.com 2019 - 2024. All rights reserved.