使用此库时,替换无效。 使用卷曲时可以使用。
`'use strict';
var config = {
apiKey: '',
from: '',
to: '',
templateId: ''
}
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(config.apiKey);
async function sendTest() {
var newMsg = {
"from": {
"name": "Test Script",
"email": config.from
},
"personalizations": [{
"to": config.to,
"substitutions": {
"-firstName-": "Maciejs",
"%firstName%": "Maciej",
"-first_name": "Maciej",
"%first_name%": "Maciej"
}
}],
"subject": "test subject",
"content": [{
"type": "text/plain",
"value": "Hello, %firstName%!"
},
{
"type": "text/html",
"value": "<html><p>Hello, %firstName%!</html> "
}],
"template_id": config.templateId
}
await sgMail.send(newMsg);
}
sendTest();`
我还将在SendGrid编辑器中附加模板的屏幕截图以及收到的电子邮件
@MaciejKrawczyk您是否尝试过使用setSubstitutionWrapper
并从substitutions
省略包装器?
例如:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": {
"firstName": "Maciejs"
}
不知道如何用这种方式一次处理多个包装器,但是我通过不指定替代属性中的包装器就可以使潜艇使用该版本。 我的潜艇看起来像emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName
有用。 谢谢!
感谢您为@kmcurry提供帮助!
我很高兴您已经启动并运行@MaciejKrawczyk!
这绝对应该放在自述文件中! 花了我2个小时才弄清楚!
@thinkingserious是的。 这个文档确实有很大帮助。 但是,由于我来自官方网站,其中替换键应包括包装器,因此我对用例没有太在意。
嗨@LASkuma ,
当您说自己来自官方网站时,能否让我知道您所指的URL? 谢谢!
嗨@thinkingserious ,
我指的是这一页。 甚至“试用”部分也具有包含包装程序的替换键。 阅读文档后,我认为Node库自然与文档一致。
谢谢@LASkuma!
这确实是有用的反馈。
我不太确定该解决方案。 这些文档适用于那些希望直接与我们的API进行交互而又不希望使用我们的帮助程序库之一的人。
先前您提到我们应该在README中包含此文档。 你的意思是这里吗? 我们是否应该在那里专门指出替代用例?
再次感谢你的帮助!
最诚挚的问候,
埃尔默
这肯定是自述文件。 我尝试了一切,阅读了SendGrid api参考上的所有文档,GitHub上的所有文档(我认为),都联系了支持人员,如果没有@kmcurry的话,我将自己制作自己的api包装器,我认为这样会更容易和避免混淆如果帮助程序库将完全像API本身一样工作(请参阅线程开头的代码)。
谢谢@MaciejKrawczyk ,
这是非常好的反馈,我已将其添加到我们团队的待办事项列表中,以进行更深入的探讨。 我们将提供有关该线程的更新。
谢谢!
最诚挚的问候,
埃尔默
完成了吗我有同样的问题;
嗨@sriharrsha ,
您是否尝试过@kmcurry的建议?
还没。 我将更新它是否有效。
这么晚才回复很抱歉。
对于昨天像我这样绝望的所有人:在v3 API中,您需要使用dynamic_template_data
而不是substitutions
,这在任何地方都没有记录!
然后在电子邮件模板中使用{{var_name}}
,在API调用中使用dynamic_template_data: { var_name: "var_value" }
。
@tkafka天哪! 感谢这个男人,在过去的两天里一直在拉我的头发。
@tkafka非常感谢! 真令人沮丧! 花了我3个小时的时间...
这是完整的代码,以防有人寻找相同的代码:
var sendgrid = require('@sendgrid/mail');
sendgrid.setApiKey(env.sendgridApiKey);
sendgrid.setSubstitutionWrappers('{{', '}}');
var newMsg = {
"from": {
"name": "Your Company",
"email": env.businessEmail
},
"personalizations": [{
"to": order.email,
"dynamic_template_data": {"order_id": "1234", "first_name": "Max", "last_name": "Mustermann"}
}],
"subject": "test subject",
"content": [{
"type": "text/plain",
"value": "Hello, {{firstName}}!"
},
{
"type": "text/html",
"value": "<html><p>Hello, {{'firstName}}!</html> "
}],
"template_id": env.sendgridOrderConfirmationTemplateId
};
console.log("Sending confirmation email...")
return sendgrid.send(newMsg);
至少可以说,sendgrid的文档太恐怖了。
哈, dynamic_template_data
。 我解决了你的小难题! :微笑:
对于其他打字稿用户-创建文件mail.d.ts
:
import {MailData} from "@sendgrid/helpers/classes/mail";
// see https://github.com/sendgrid/sendgrid-nodejs/issues/638
declare module "@sendgrid/helpers/classes/mail" {
export interface MailData {
dynamic_template_data: {[key: string]: string};
}
}
谢谢@xduseko !
最有用的评论
对于昨天像我这样绝望的所有人:在v3 API中,您需要使用
dynamic_template_data
而不是substitutions
,这在任何地方都没有记录!然后在电子邮件模板中使用
{{var_name}}
,在API调用中使用dynamic_template_data: { var_name: "var_value" }
。