Sendgrid-nodejs: 如果使用动态模板则未设置主题

创建于 2018-11-07  ·  29评论  ·  资料来源: sendgrid/sendgrid-nodejs

我试图使用动态模板为电子邮件添加主题,但是它不起作用。 这是一个已知的错误吗? 您可以针对此问题提出任何解决方法吗?

模板代码:

<html>
<head>
  <title></title>
</head>
<body>
  <p> Hello <span>{{test_name}}!</span></p>
</body>
</html>

发送邮件功能:

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(settings.sendgrid.api_key);
sgMail.setSubstitutionWrappers('{{', '}}');

const msg = {
    to: '[email protected]',
    from: settings.sendgrid.from,
    subject: 'Test Subject',
    templateId: settings.sendgrid.template_id,
    dynamic_template_data: {
    test_name: 'Testing Name'
    },
};

sgMail.send(msg);
question

最有用的评论

你好@jlouie

用户界面中的主题区域是否看起来像这样?

screen shot 2019-01-24 at 1 30 06 pm

最诚挚的问候,

埃尔默

所有29条评论

与#834相同

@ 10kc-zack我明白了。 那么这是一个已知问题。

顺便说一句,您采取了什么解决方法来解决它?

@ nyel-dev在SendGrid网站上设置模板的主题即可。 问题在于,似乎在触发动态模板时,SendGrid的API不允许您提供模板。

您好@ nyel-dev,

我相信您可以在事务处理模板中将主题设置为{{subject}},然后在代码中将data.subject设置为"[TEST] My Email Subject"

那对你有用吗?

最诚挚的问候,

埃尔默

@thinkingserious ,希望您能有更多的见解。

我正在从旧版模板过渡到事务模板,并且即使在用{{subject}}替换事务模板主题字段之后,我现在也遇到相同的问题(sendgrid-nodejs v6.3.1,节点:v8.11.4)。 我没有通过setSubstitutionWrappers()显式设置替换包装,而只是使用默认的车把设置(尽管我在测试时也尝试过设置它们)。

我已经确认我在第一个测试用例中传递了subject属性(没有引号或特殊字符)作为msg.subject在我的第二个测试用例中传递了subject msg.dynamic_template_data.subject为我的第三个测试用例设置,收到的结果电子邮件仍然没有按我期望的那样替换主题。 电子邮件主题显示“(无主题)”。

但是,在“预览”模式下在sendgrid站点上测试模板本身并设置“测试数据”确实会按预期替换文本。

任何帮助,将不胜感激。 谢谢!

*编辑*
我还要提到的是,邮件正文中的替换已按预期替换,只是没有在主题行中替换。

你好@jlouie

这是一个完整的例子。 希望对您有所帮助!

最诚挚的问候,

埃尔默

@thinkingserious主题未在示例中显示在电子邮件中

to: "[email protected]",
  from: "[email protected]",
  subject: "Hello world",
  text: "Hello plain world!",
  html: "<p>Hello HTML world!</p>",
  templateId: "d-xxxx",
  dynamic_template_data: {
    subject: "Testing Templates & Stuff",
    name: 'Some "Testing" One',
    city: "<b>Denver<b>"
  }

image

你好@jlouie

这是一个完整的例子。 希望对您有所帮助!

最诚挚的问候,

埃尔默

@thinkingserious :不幸的是,事实并非如此。 我仍然在发送/接收的电子邮件中缺少主题行,就像@nicholasess一样。

你好@jlouie

用户界面中的主题区域是否看起来像这样?

screen shot 2019-01-24 at 1 30 06 pm

最诚挚的问候,

埃尔默

顺便说一句,我能够通过使用Sendgrid模板界面上的Set Subject来解决此问题。 谢谢@thinkingserious

我建议将设置更改为菜单,如代码,测试数据。
image

设置的地方是隐藏的:/

感谢您的反馈@nicholasess! 我将其传递给设计团队。

我遇到了同样的问题,我不得不依靠这种解决方法,但是如果不仔细研究问题,它就不会起作用。

这是非常违反直觉的,因为文档说您在API调用中设置了主题(并详细说明了如何为消息全局设置主题以及如何在个性化设置中覆盖主题,而这种解决方法显然会丢失该主题)。

我们还会丢失“在管理页面上设置的默认主题,可以在API调用中覆盖它”。 不会,通过解决方法,我们总是必须为受影响的模板指定主题。

(除非有一种方法可以在{{}}插值中设置默认值。我将为此检查文档,到目前为止,我发现的是关于使用破折号的插值方法,我完全不了解。)

@thinkingserious

为什么关闭此问题? 它不是固定的。

我知道它看起来可能很奇怪,但是伙计们要确保您没有打开具有相同屏幕的窗口或选项卡。 Sendgrid ui具有自动保存功能,可以重写之前保存的所有数据。

在主题{{subject}}中使用

并像其他变量一样作为变量发送,

这样工作。

我在这个问题上停留了很长时间,因为我一直在关注文档,并认为自己做错了什么。 由于我要从旧版模板进行迁移,因此我认为API会保持不变,并且很惊讶地发现它突然无法按预期工作。

是否有计划将文档更新为v3/mail/send以正确反映此更改?

我能够解决此问题的唯一方法是_triple-stash_:

{{{ subject }}}

根据这篇文章https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/transactional-templates.md

可以确认在主题领域使用三重而不是双大括号

每当我在主题行中保存三次卷曲或任何其他代码时,该代码会在几分钟后自动恢复为标准<%subject%>。

还有其他人有同样的问题吗?

还有其他人有同样的问题吗?

当我打开两个窗口时,我已经看到了类似的东西。 SendGrid自动保存,因此如果您打开了两个窗口,它们将相互抵消。

它为我工作的方式:

在SendGrid用户界面的主题字段中使用: {{{subject}}}

message.dynamic_template_data发送"subject": "test" message.dynamic_template_data

建议:你们应该真正在您的文档上工作。 我的意思是说,他们真的是如此分散,零碎是过时的。

三括号仍在起作用,我只是在检查它是否仍然是官方解决方案。

谢谢!

image

@tcukanoot是的。

请做开题! 文档仍然不正确,建议在请求的顶层设置subject 。 但是,它必须包含在dynamic_template_data并且模板中的使用者必须设置为{{subject}}或任何其他动态键。 它自2018年开放,此后未对文档进行任何更改!

尝试使用替换或dynamic_template_data时,服务器收到400请求错误

请修复您的文档。 基于https://github.com/sendgrid/sendgrid-python/blob/main/use_cases/kitchen_sink.md和v3文档,dynamic_template_date无效
但是人们报告说它对他们有用

这是怎么回事? 🤔

它为我工作的方式:

在SendGrid用户界面的主题字段中使用: {{{subject}}}

message.dynamic_template_data发送"subject": "test" message.dynamic_template_data

建议:你们应该真正在您的文档上工作。 我的意思是说,他们真的是如此分散,零碎是过时的。

如何在PHP中做到这一点。 请分享代码!

文档当前是否在建议主题作为顶级参数发送时只是不正确?

它为我工作的方式:

在SendGrid用户界面的主题字段中使用: {{{subject}}}

message.dynamic_template_data发送"subject": "test" message.dynamic_template_data

建议:你们应该真正在您的文档上工作。 我的意思是说,他们真的是如此分散,零碎是过时的。

这对我有用! 您的文档应类似于:

const msg = {
    to: toEmail,
    from: "email",
    templateId: "tempateId",
    dynamic_template_data: {
      subject: "subjectHere",
    },
  };

sendGridEmail
    .send(msg)
    .then(() => console.log("email sent"))
    .catch((error) => console.error(error.toString()))
此页面是否有帮助?
1 / 5 - 1 等级

相关问题

Loriot-n picture Loriot-n  ·  4评论

prasoonjalan picture prasoonjalan  ·  3评论

mikemaccana picture mikemaccana  ·  4评论

wooyah picture wooyah  ·  4评论

polkhovsky picture polkhovsky  ·  3评论