Sendgrid-nodejs: 模板中的Sendgrid v3 Nodejs替换不起作用

创建于 2018-04-18  ·  15评论  ·  资料来源: sendgrid/sendgrid-nodejs

你好

在sendgrid nodejs npm软件包中,我遇到了一个问题。 我可以发送带有替换项和模板的电子邮件,但是问题出在客户端的电子邮件中,例如%name%,%company%等。替换项没有替换为该值。

程式码片段
const sgMail = require('@ sendgrid / mail');
sgMail.setApiKey(sendgrid_key);
var msg =
{
“个性化”:[{
“至”: [{
“ email”:“ [email protected] ”,
“名称”:“某些公司”
}],
“替代”:{
“%name%”:“约翰”,
“%company%”:“某些公司”,
“%business%”:“ Faster Pheny”
},
“ subject”:“某公司的发票!”
}],
“来自”:{
“ email”:“ CompanyA [email protected] ”,
“名称”:“ CompanyA”
},
“回复”: {
“ email”:“ [email protected] ”,
“名称”:“客户服务”
},
“ subject”:“某公司的发票!”,
“ template_id”:“ 93f052da-08d4-46f2-8f0c-f2a193bceea0”
};

邮件
.send(msg)
.then(()=> {
console.log('SendGrid ::成功发送电子邮件后的响应!')
})
.catch(错误=> {
console.error('Error SendGrid :::'+ error.toString());
});

代码将被执行并接收电子邮件,而不用替换%name%,%business%,%company%


现在我尝试使用sengrid网站https://sendgrid.com/docs/API_Reference/api_v3.html
它发送完美的电子邮件,没有任何问题,并且所有替换均正确完成。

我用来设置sgMail.send(msg)中的值的javascript npm代码有什么问题?

请求您的帮助。

question

最有用的评论

Sendgrid v3需要使用dynamic_template_data替换替换,如下所示:

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

所有15条评论

似乎您缺少替代包装器。 我只是通过一个简单的模板使用了他们在用例中使用的示例,它可以工作。

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
sgMail.setSubstitutionWrappers('{{', '}}'); // Configure the substitution tag wrappers globally
const msg = {
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Hello world',
  text: 'Notification',
  html: '<p></p>',
  templateId: 'your-id-goes-here',
  substitutions: {
    name: 'John'
  },

};
sgMail.send(msg);

我的模板仅包含以下代码片段:

<%body%> {{name}}

显然, <%body%>部分是必需的。

也许您可以尝试将包装器设置为{{}}东西(或% ,在您的情况下% ),也请注意该示例在替代对象中没有包含包装,而只是替代名称。

尝试这样的事情:

"substitutions": {
  name: "John",
  company: "Some Company",
  business: "Faster Pheny"
},

太棒了有效。 万分感谢。 替代包装纸是丢失的。

感谢您的完整答案。 编码愉快!

@adamreisnz

也许我们应该默认调用sgMail.setSubstitutionWrappers('{{', '}}');以避免将来出现此类问题。 你有什么感想?

@adamreisnz

也许我们尝试检测一些常见的包装器,例如%或_?

那太好了。 当用户通过Sendgrid门户创建/设计模板时,门户默认情况下会插入替换%body%和%name%。 因此,用户自然会认为不更改%字符,并会继续使用模板,因为他不完全了解其功能。 如果Sendgrid可以建议将%更改为任何字符,或者该功能首选{{}},那么用户将使用它,或者加载默认设置的模板首先将%替换为{{。 这样可以避免我遇到的问题。

我不希望自动检测,除非它是一种非常强大的算法。 尝试使流程过于智能的麻烦在于,它可能导致潜在的难以调试的错误。 如果有人使用_进行强调怎么办? 例如,确实强调。 这并不意味着_符号是替代包装器。 与% ,您可以将其用于百分比,并且可能使算法误以为您将其用作替代包装,而您没有使用它。

由于Sendgrid正在转向使用{{}}作为替换包装器的车把模板,因此我认为这是明智的默认设置。 这些字符在诸如把手之类的语言中用作替换包装的原因是有原因的,因为它们在普通语言中不是很常见。 下划线和百分比更常见,因此可能容易产生误解。

我认为这只是很好地记录下来以便清楚说明的问题。 可以选择指定自己的包装器,用户应该拥有使其工作所需的一切。

如果有人确实对鲁棒的自动检测有所了解,我很乐意看到一种伪算法,该算法可以很好地处理所有方案和所有可能的包装,同时避免误报。

有什么想法吗?

同意。 文档更新将是最好的选择。

@adamreisnz @vinvantest同意,请参阅https://github.com/sendgrid/sendgrid-nodejs/issues/681了解进度。

Sendgrid v3需要使用dynamic_template_data替换替换,如下所示:

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

@goelmk

是一个完整的例子。 谢谢!

最诚挚的问候,

埃尔默

非常困惑,您必须使用dynamic_template_data
最好更新文档https://sendgrid.com/docs/API_Reference/api_v3.html

我尝试了以下@goelmk最新示例。 不为我工作:(
我的模板是使用您的WYSIWYG编辑器构建的,我尝试将{{verifyUrl}}放在文本组件和按钮组件的url链接中。 都不起作用。

@shawnkoh解决了吗? 我还使用视觉设计器创建了模板,但替换无效。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

kiranshashiny picture kiranshashiny  ·  4评论

Chrischuck picture Chrischuck  ·  3评论

murphman300 picture murphman300  ·  4评论

thidasapankaja picture thidasapankaja  ·  4评论

danielflippance picture danielflippance  ·  4评论