Sendgrid SMTP API 发送邮件时不替换替换标签
Sendgrid SMTP API not replacing substitution tags when sending message
我正在开发一个 Node.js 应用程序,它包含用于用户邀请等内容的 Sendgrid 交易电子邮件模板。具体来说,我在 Ubuntu 上使用带有官方 sendgrid v2 npm 的 nodejs v0.10.25。我实际发送消息的函数如下:
function sendEmail(payload, options, cb){
//for debugging purposes
console.log(options);
var email = new sendgrid.Email({
subject: payload.subject,
html: payload.html,
from: global.config.sendgrid.mailFrom,
fromname: global.config.sendgrid.mailName,
replyto: options.replyto ? options.replyto : 'no-reply@' + global.config.sendgrid.mailhost
});
email.setSmtpapiTos(options.addressees);
if(options.filters)
email.setFilters(options.filters);
if(options.subs)
email.setSubstitutions(options.subs);
if(options.category)
email.setCategories(options.category);
if(options.unique_args)
email.setUniqueArgs(options.unique_args);
sendgrid.send(email, function(err, json){
return cb(err, json);
});
}
包含替换的选项对象如下所示:
{ category: 'Support Invite',
addressees: [ %EMAIL1%, %EMAIL2% ],
sub:
{ '-name-': [ 'Shawn 1', 'Shawn 2' ],
'-id-': [ 1, 2 ],
'-pic-':
[ '<img height="100" src="%PICTURE URL%?sz=50" style="width: 100px; height: 100px;" width="100" />',
'<img height="100" src="%PICTURE URL%?sz=50" style="width: 100px; height: 100px;" width="100" />' ] },
filters:
{
templates:
{
settings:
{ 'enable': 1,
'template_id': global.config.sendgrid.transactions.supportInvite} } },
unique_args:
{
sender: '104294048950213400380' } }
最后,HTML 来自这个测试的模板:
<html>
<head>
<title></title>
</head>
<body>
<div style="text-align: center;"><span>-pic-</span></div>
<div><span style="font-family:tahoma,geneva,sans-serif;">Hello -name-,</span></div>
<div> </div>
<div><span style="font-family:tahoma,geneva,sans-serif;"><%body%></span></div>
<div> </div>
<div> </div>
<div> </div>
<div><span style="font-family:tahoma,geneva,sans-serif;"><span style="font-size:9px;">Invitation ID:</span> -id-</span></div>
</body>
</html>
邮件会以正确的模板、主题和发件人信息发送给适当的收件人。我还可以从我的 SendGrid 统计信息中验证它们是否标记有适当的类别和 SMTP 参数 ("sender")。 但是替换没有完成。例如,-name- 标签仍然存在于我的测试邮箱中的结果电子邮件中。
我试过在 SendGrid 上查阅文档,包括他们的 SMTP API,并查询他们的支持数据库。我还搜索了 StackExchange,但最相关的问题 (, this, and ) 并没有提供答案。特别有趣的是,每个人都使用不同的字符作为替换标记。不知道那是纯粹的选择还是语言依赖。我尝试了不同的字符(-、: 和 %),但结果相同。
我看到您的选项对象有一个 属性 子,而不是子。 option.subs 将始终未定义,因此在
中为 false
if (options.subs)
要么尝试将其更改为
if (options.sub)
或者将选项中的 属性 从 sub 重命名为 subs。
我正在开发一个 Node.js 应用程序,它包含用于用户邀请等内容的 Sendgrid 交易电子邮件模板。具体来说,我在 Ubuntu 上使用带有官方 sendgrid v2 npm 的 nodejs v0.10.25。我实际发送消息的函数如下:
function sendEmail(payload, options, cb){
//for debugging purposes
console.log(options);
var email = new sendgrid.Email({
subject: payload.subject,
html: payload.html,
from: global.config.sendgrid.mailFrom,
fromname: global.config.sendgrid.mailName,
replyto: options.replyto ? options.replyto : 'no-reply@' + global.config.sendgrid.mailhost
});
email.setSmtpapiTos(options.addressees);
if(options.filters)
email.setFilters(options.filters);
if(options.subs)
email.setSubstitutions(options.subs);
if(options.category)
email.setCategories(options.category);
if(options.unique_args)
email.setUniqueArgs(options.unique_args);
sendgrid.send(email, function(err, json){
return cb(err, json);
});
}
包含替换的选项对象如下所示:
{ category: 'Support Invite',
addressees: [ %EMAIL1%, %EMAIL2% ],
sub:
{ '-name-': [ 'Shawn 1', 'Shawn 2' ],
'-id-': [ 1, 2 ],
'-pic-':
[ '<img height="100" src="%PICTURE URL%?sz=50" style="width: 100px; height: 100px;" width="100" />',
'<img height="100" src="%PICTURE URL%?sz=50" style="width: 100px; height: 100px;" width="100" />' ] },
filters:
{
templates:
{
settings:
{ 'enable': 1,
'template_id': global.config.sendgrid.transactions.supportInvite} } },
unique_args:
{
sender: '104294048950213400380' } }
最后,HTML 来自这个测试的模板:
<html>
<head>
<title></title>
</head>
<body>
<div style="text-align: center;"><span>-pic-</span></div>
<div><span style="font-family:tahoma,geneva,sans-serif;">Hello -name-,</span></div>
<div> </div>
<div><span style="font-family:tahoma,geneva,sans-serif;"><%body%></span></div>
<div> </div>
<div> </div>
<div> </div>
<div><span style="font-family:tahoma,geneva,sans-serif;"><span style="font-size:9px;">Invitation ID:</span> -id-</span></div>
</body>
</html>
邮件会以正确的模板、主题和发件人信息发送给适当的收件人。我还可以从我的 SendGrid 统计信息中验证它们是否标记有适当的类别和 SMTP 参数 ("sender")。 但是替换没有完成。例如,-name- 标签仍然存在于我的测试邮箱中的结果电子邮件中。
我试过在 SendGrid 上查阅文档,包括他们的 SMTP API,并查询他们的支持数据库。我还搜索了 StackExchange,但最相关的问题 (
我看到您的选项对象有一个 属性 子,而不是子。 option.subs 将始终未定义,因此在
中为 falseif (options.subs)
要么尝试将其更改为
if (options.sub)
或者将选项中的 属性 从 sub 重命名为 subs。