使用Node.js的SendGrid模板中的变量替换不起作用

时间:2018-08-02 09:26:10

标签: javascript node.js sendgrid-api-v3 sendgrid-templates

USE CASE之后,github确实设法向我发送了带有正确模板的电子邮件,但是替换显然不起作用,并且在生成的电子邮件中留为空白。服务器端:

const sgmailer = require("@sendgrid/mail");
sgmailer.setApiKey(process.env.SENDGRID_API_KEY);
sgmailer.setSubstitutionWrappers('{{', '}}');

const msg = {
    to: '...',
    from: 'sender@example.org',
    subject: 'Hello world',
    text: 'Hello plain world!',
    html: '<p>Hello HTML world!</p>',
    templateId: '...',
    substitutions: {
        name: 'Some One',
        city: 'Denver',
    },
};
sgmailer.send(msg)

模板中的HTML:

<html>
<head>
    <title></title>
</head>
<body>
Hello {{name}},
<br /><br/>
I'm glad you are trying out the template feature!
<br /><br/>
<%body%>
<br /><br/>
I hope you are having a great day in {{city}} :)
<br /><br/>
</body>
</html>

收件箱中的结果电子邮件:

  

你好,

     

很高兴您正在尝试使用模板功能!

            

我希望您在:)过得愉快。

此处显然缺少变量。 如何正确替换变量?

2 个答案:

答案 0 :(得分:3)

由于我使用的是来自SendGrid的 dynamic 模板,因此我不能使用“ substitutions”标签,而必须使用“ dynamic_template_data”标签,请参见this issue。将msg-object更改为

const msg = {
    to: '...',
    from: 'sender@example.org',
    subject: 'Hello world',
    text: 'Hello plain world!',
    html: '<p>Hello HTML world!</p>',
    templateId: '...',
    dynamic_template_data: {
        name: 'Some One',
        city: 'Denver',
    },
};

有效。据我所知,SendGrid文档中没有对此进行记录。

答案 1 :(得分:0)

你也可以这样做:

import { getConfig } from '../config';    
const msg = {
                to: recipient,
                from: global.gConfig['SENDGRID_EMAIL_FROM'], // or getConfig().SENDGRID_EMAIL_FROM
                templateId: this.templateId,
                dynamicTemplateData: this.variables,
    };

getConfig.ts

export function getConfig(): any {
    return process.env;
}