2018 年 7 月 24 日,我们的团队公开发布了交易模板的动态内容。 它现在可供所有通过我们的 Mail Send API v3 发送的客户使用。 由于对 Handlebars 语法子集的本机支持,迭代列表、处理条件等等!
更多信息可以在我们的博客文章公告中找到。
您目前可以通过手动创建请求正文来使用此功能,如下所示。
现在,我们需要为此 SDK 创建帮助程序代码(已完成)和示例。
请更新您的文档 - 我只是花了一个小时试图弄清楚为什么替换不能与 v3 API 一起使用。
对于@jharris-code 的糟糕体验,我深表歉意。
我已将您的投票添加到此问题以帮助它获得优先权。 我认为它很快就会更新,因为我们有 PR #711。
文档的缺失阻碍了实际代码的发布,这是非常愚蠢的。
@thinkingserious哦,
我会试试的,谢谢。
用户注意:使用模板时传递dynamic_template_data
而不是substitutions
。
现在您必须将“替换:”更改为“dynamic_template_data:”
并且模板使用把手不再需要指定“substitutionWrappers”
我很抱歉@josh-yonomi,
我已经根据您的反馈更新了文档。
对于我们的新模板,它们使用把手语法。 旧模板仍然像以前一样工作。
最诚挚的问候,
埃尔默
我收到电子邮件,但替换不起作用。 什么会导致问题?
const msg = {
to: email,
from: sendGridMail,
templateId: emailTemplate.confirmationEmail,
dynamic_template_data: {
firstName: firstName,
lastName: lastName,
link: link
}
};
通过@thinkingserious编辑
你介意让我们知道问题出在哪里吗? 我们很想了解您的不满,以便我们改进。
@drav96 ,
你介意分享你的模板是什么样的吗?
最诚挚的问候,
埃尔默
为什么要在替换包装器中去除特殊字符?
dynamic_template_data: {
'foo-bar': 'wtf',
'bar_baz': 'wtf',
'baz.bro': 'wtf',
'foo': 'wtf'
}
只有{{foo}}
在电子邮件中返回wtf
字符串。
我不确定@larafale ,但这当然似乎不合理。 查看此 SDK 的源代码,我没有看到这些键在哪里被修改。
您介意为此问题创建一个单独的问题并包含您的 HTML 模板的外观吗? 我会将新问题标记为错误,并在必要时尝试重现和修复。
你好,
因此,我正在尝试发送动态模板电子邮件,但是,我无法使用替换或dynamic_template_data
。
我的模板有{{fullname}}
或{{date}}
等标签,这些属性被发送到send
函数:
const msg = {
to,
from,
templateId: template.id,
dynamic_template_data: substitutions,
};
return sgMail.send(msg)
我确认substitutions
对象具有正确的属性和正确的值,但替换不起作用。
知道我做错了什么吗?
谢谢。
@gianfelipe93
结构是正确的。 我有同样的问题。
我的解决方案是从我的项目中卸载@sendgrid包并重新安装
请让我知道这对你有没有用
const msg= {
to: email,
from: sendGridMail,
templateId: emailTemplate.requestDemoEmail,
dynamic_template_data: {
name: data.name,
email: data.email,
}
};
@drav96谢谢伙计,现在可以使用了
在浪费了我一个小时的时间之后,添加我希望将成为一些权威文档的内容。 (首先,感谢在我之前浪费时间的所有人。)
d-
开头,则substitutions
将不起作用,您应该使用 CAMEL-CASE dynamicTemplateData
(请参阅此处,他们将snake_case 键转换为camelCase )d-
开头,则setSubstitutionWrappers
被静默忽略,并且您必须在模板中使用{{
和}}
在浪费了我一个小时的时间之后,添加我希望将成为一些权威文档的内容。 (首先,感谢在我之前浪费时间的所有人。)
- 如果您的模板 id 以
d-
开头,则substitutions
将不起作用,您应该使用 CAMEL-CASEdynamicTemplateData
(请参阅此处,他们将snake_case 键转换为camelCase )- 如果您的模板以
d-
开头,则setSubstitutionWrappers
被静默忽略,并且您必须在模板中使用{{
和}}
在我的情况下,它适用于dynamic_template_data
即使在模板 id 中有字母d-
是的,它确实适用于蛇盒钥匙,但似乎开发人员已在内部承诺使用骆驼盒(请参阅我在上面的报告中链接的行)。 因此,我建议所有新代码都使用驼峰式大小写。
你好@kael-shipman,
感谢您抽出宝贵时间提供帮助,我们非常感谢!
你有没有看到这个文档? 如果没有,您是否介意描述导致浪费时间的发现路径。 我希望这种情况不再发生,并为这次糟糕的经历深表歉意。
最诚挚的问候,
埃尔默
@thinkingserious ,感谢您的理解和改善情况的意愿。 很抱歉在那里得到了一些片段。 有一个looooooooooooooong 一天;)。
无论如何,问题不在于某个地方存在正确的(ish)文档,而是许多旧文档仍然存在于 Google 搜索中。 我搜索了“sendgrid 模板字段”(刚才),第一个非广告结果是this ,所有迹象表明这是官方文档,但显然已经过时了。 不仅如此,它还具有两种不同的替换格式( -firstName-
和%firstName%
),并且只说“您使用的内容可能取决于您使用的 SDK 库”,考虑到这一点,这似乎真的不合适所有 SDK 库都可能指向同一个寺庙(只有一种样式的替换标签)。
根据我使用 sendgrid 的经验,虽然我非常欣赏已经构建的内容,但这种文档混乱实际上是规则,而不是例外。 我知道它可能和软件世界的其他部分一样快速发展,但最好花一个月左右的时间来规范化所有文档,在上面放上版本号等等,也许可以做点什么谷歌热门搜索。
无论如何,再次感谢!
此外,您链接的文档仍然在蛇的情况下显示dynamic_template_data
,如果这是正确的,那么我不确定为什么代码本身似乎将其转换为驼峰式。 如上所述,我承认蛇案例有效,但鉴于代码,文档似乎不建议使用它。
你好@kael-shipman,
感谢您抽出宝贵时间提供详细的反馈!
关于您提供的链接,该文档参考了我们的 SendGrid SMTP API,而不是此 SDK 支持的 SendGrid v3 REST API。 也就是说,您不应期望知道这一点。 我会将这个问题提请我们的文档团队注意,看看是否有办法将其弄清楚。
我们最近刚刚更新并重新发布了我们的开源文档。 我希望你能更轻松地导航。
我将修复 README 以使用驼峰命名以保持一致性。 感谢您发现并引起我们的注意!
再次感谢并感谢您提供详细的反馈,我们想为您提供一些赃物。 享受!
最诚挚的问候,
埃尔默
嘿酷,谢谢:D
2018 年 9 月 18 日,星期二,下午 6:09,Elmer Thomas通知@github.com
写道:
你好 @kael-shipman https://github.com/kael-shipman ,
感谢您抽出宝贵时间提供详细的反馈!
关于您提供的链接,该文档是参考
到我们的 SendGrid SMTP API,而不是这个 SDK 的 SendGrid v3 REST API
支持。 也就是说,您不应期望知道这一点。 我会带
提请我们的文档团队注意这个问题,看看是否有
方法说清楚。我们最近更新并重新发布了我们的开源文档
https://sendgrid.com/blog/how-to-get-the-most-from-sendgrids-new-knowledge-center/ 。
我希望你能更轻松地导航。我将修复 README 以使用驼峰命名以保持一致性。 感谢
抓住它并引起我们的注意!再次感谢并感谢您提供详细的
反馈,我们想为您提供一些赃物
https://dx.sendgrid.com/swag 。 享受!最诚挚的问候,
埃尔默
—
你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/sendgrid/sendgrid-nodejs/issues/703#issuecomment-422588492 ,
或静音线程
https://github.com/notifications/unsubscribe-auth/ADUIglZIH2d7imy-H7dekTo5A-v2Xau8ks5ucX0agaJpZM4Vev8b
.
我可以让dynamic_template_data
用于一般电子邮件变量,但是如果我们还需要为每个收件人添加动态数据怎么办? 例如订单号、订单数量等。我在文档中没有看到这方面的用例,但也许我忽略了它。
用户注意:使用模板时传递
dynamic_template_data
而不是substitutions
。
@catamphetamine不幸的是,我对你的评论dynamicTemplateData
,但在我的情况下,替换被简单地删除了。 我只是希望其他人有更好的体验。
我的版本:
"@sendgrid/mail": "^6.3.1"
事实证明,对我来说,我必须执行以下操作(与人们所说的相反):
// This seems to be the default, however, to avoid unexpected API changes,
// I'd rather set this manually
setSubstitutionWrappers("{{", "}}");
{
subject: EMAIL_SUBJECT_ONBOARDING,
templateId: "templateId",
personalizations: [{
to,
// NOT WORKING WITH THIS ❌
// dynamicTemplateData: {
// senderName: EMAIL_FROM_NAME,
// senderAddress: "an actual adress",
// },
// WORKS WITH THIS ✅
substitutions: {
senderName: EMAIL_FROM_NAME,
senderAddress: "an actual adress",
},
}],
}
@thinkingserious喜欢这个工具。 请继续改进文档,覆盖边缘情况等。🎉❤️
感谢@catamphetamine 投反对票。 这让我想到substitutions
有效,因为我做了setSubstitutionWrappers("{{", "}}");
。 唉,没有。 我不知道发生了什么我可能累了,但是dynamicTemplateData
确实有效。 请注意,这是camelCase _(请参阅@kael-shipman 评论)_ 我看到了大多数蛇形案例。 另外,我正在使用 TS 类型的 sendgrid。 定义中没有可用的 snake_case 键。
关于可用的类型。 我在PersonalizationJSON
类型中找到了dynamic_template_data
。 如果您使用以下内容:
import { send } from "@sendgrid/mail";
然后在检查发送的第一个参数后,您将看到MailData
具有以下定义:
export interface MailData {
// ...
personalizations?: PersonalizationData[],
// ...
}
然后我偶然发现了以下两种类型:
export interface PersonalizationData {
// omitted keys...
dynamicTemplateData?: { [key: string]: string; };
customArgs?: { [key: string]: string };
sendAt?: number;
}
export interface PersonalizationJSON {
// same omitted keys...
dynamic_template_data?: { [key: string]: string; };
custom_args?: { [key: string]: string; };
send_at?: number;
}
最后,我让dynamic_template_data
像这样始终如一地工作:
{
templateId: "d-templateId",
dynamic_template_data: { name: "elton yet again"}, // <-- either here
personalizations: [{
to,
dynamic_template_data: { name: "Elton again" }, // <-- or here
}],
}
@thinkingserious显然,存在需要修复的类型定义问题。 稍后我可能会创建一个 PR。
好的,我需要再次调查。 我很震惊,因为现在dynamicTemplateData
和substitutions
都不适合我。
更新:
翻转了一些表格,但让它工作并更新了我之前的评论。
最后,我让
dynamic_template_data
像这样始终如一地工作:{ templateId: "d-templateId", dynamic_template_data: { name: "elton yet again"}, // <-- either here personalizations: [{ to, dynamic_template_data: { name: "Elton again" }, // <-- or here }], }
这对我来说很重要。 我试图在交易模板中设置与 to vs cc 电子邮件不同的主题。 当我按照上面的方法将 dynamic_template_data 属性放入个性化数组时,它就起作用了。
const msg = {
personalizations: [
{
to: req.body.to,
dynamic_template_data : {
subject: "Just to adsf...",
full_name_from: req.body.full_name_from,
full_name_to: req.body.full_name_to,
manager: req.body.manager,
message: req.body.message,
badge: req.body.badge,
badge_image: 'https://asdf' + req.body.badge_image
}
},
{
to: req.body.manager,
dynamic_template_data : {
subject: req.body.full_name_from + ' received a asdf asdf',
full_name_from: req.body.full_name_from,
full_name_to: req.body.full_name_to,
manager: req.body.manager,
message: req.body.message,
badge: req.body.badge,
badge_image: 'https://asdf' + req.body.badge_image
}
}
]
};
对我有用的解决方案是以如下所示的确切方式将 dynamic_template_data 放在个性化对象中:
"personalizations": [
{
"dynamic_template_data": {
"fullname": "full Name",
"useremail": ":[email protected]",
"userphone": "56456",
"usermsg": "tex fdsfgasdf t"
},
"to": [
{
"email": "[email protected]"
}
],
"cc": [
{
"email": "[email protected]"
}
]
}
]
最有用的评论
请更新您的文档 - 我只是花了一个小时试图弄清楚为什么替换不能与 v3 API 一起使用。