Sendgrid-nodejs: 替换在事务模板中不起作用

创建于 2017-12-08  ·  20评论  ·  资料来源: sendgrid/sendgrid-nodejs

screenshot from 2017-12-08 10-36-46

发行摘要

使用此库时,替换无效。 使用卷曲时可以使用。

重现步骤

  1. 在您的SendGrid帐户中创建交易电子邮件模板
  2. 模板中有<%body%>,%firstName%或两者都有(我都尝试过)
  3. 执行此节点代码(填写配置)
`'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();`
  1. 请注意,所寄送的电子邮件将不会替换任何内容。 同样,它与卷曲完美配合。

我还将在SendGrid编辑器中附加模板的屏幕截图以及收到的电子邮件
screenshot from 2017-12-08 10-36-26

技术细节:

  • sendgrid-nodejs版本:6.1.4
  • Node.js版本:8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

最有用的评论

对于昨天像我这样绝望的所有人:在v3 API中,您需要使用dynamic_template_data而不是substitutions ,这在任何地方都没有记录!

然后在电子邮件模板中使用{{var_name}} ,在API调用中使用dynamic_template_data: { var_name: "var_value" }

所有20条评论

@MaciejKrawczyk您是否尝试过使用setSubstitutionWrapper并从substitutions省略包装器?

例如:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": { "firstName": "Maciejs" }

不知道如何用这种方式一次处理多个包装器,但是我通过不指定替代属性中的包装器就可以使潜艇使用该版本。 我的潜艇看起来像
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

有用。 谢谢!

感谢您为@kmcurry提供帮助!

我很高兴您已经启动并运行@MaciejKrawczyk!

这绝对应该放在自述文件中! 花了我2个小时才弄清楚!

@LASkuma

那不好:(

该文档有帮助吗? 如果是这样,您能指出我第一次寻求帮助的地方,以便确保我们在那里有明确的链接吗?

谢谢!

最诚挚的问候,

埃尔默

@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的文档太恐怖了。

大家好,

请查看此问题以获取进展。 我们目前正在针对C#,然后是Java进行更新,然后紧接着是该SDK。 多谢您的耐心配合和谅解。

最诚挚的问候,

埃尔默

哈, 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

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