我只是想为 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--
但是,当我运行测试来发送电子邮件时,它可以正常发送邮件,但不会替换占位符。
我在这里缺少什么?
尝试将“替换”更改为“dynamicTemplateData”。看起来他们在新版本中改了名字。
我是怎么想出来的: https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/mail/USE_CASES.md
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'
}
};
...
希望对您有帮助!
对于不使用动态模板的人,请使用 Sendgrid 的帮助程序,如下所述:替换用例
重要提示:如果使用个性化助手,请不要忘记将您的
setSubstitutionWrappers
设置为个性化级别,如下所示personalization.setSubstitutionWrappers(['%%', '%%'])
。
如果不使用个性化,只需在全局助手中设置即可:
import mailClient from '@sendgrid/mail';
mailClient.setSubstitutionWrappers('%%', '%%')
const msgConfig = {
to: email,
from: mailConfig.defaults.from,
templateId: mailConfig.templates.registrationConfirmation,
};
msgConfig.addSubstitution('%displayName%', 'Something to display');
当用户给定的变量周围有尖括号 <% ... %> 时,它们似乎不起作用,这些是为 <%body%> 和 <%subject%> 标签保留的。
现在您可以制作看起来像这样的模板 - %displayName%
对于任何使用 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}}",
},
],
};