如何在SendGrid电子邮件中插入html的动态块?

时间:2016-09-02 15:47:59

标签: html email sendmail sendgrid

我正在使用SendGrid web API v3。尝试生成包含许多收件人的个性化对象。每个收件人都有1封电子邮件,其中包含与当前收件人相关的数据(通过替换)

示例:

personalizations: [{
       to: [{email: 'example@mail.com'}],
       subject: 'Hello, :name!',
       substitutions: {':name': 'John', ':info_section_html':'<p>Some useful block1</p><p>Some useful block2</p>'}
    },
    {
       to: [{email: 'example@mail.com'}],
       subject: 'Hello, :name!',
       substitutions: {':name': 'John', ':info_section_html':'<p>Some useful block1</p><p>Some useful block2</p><p>Some useful block3</p><p>Some useful block4</p><p>Some useful block5</p><p>Some useful block6</p>'}
    }
],
    from: {email: 'send@example.com'},
    content: [{type: 'text/html', value: 'Hello, :name! </br> Here are your very usefull info</br> :info_section_html'}]

替换时:info_section_html有很多这样的块,它超过了10000字节的限制。我的块比示例中的HTML要多得多。每个收件人可以拥有不同数量的块,这就是我不能将它们包含在内容属性中的原因。

还考虑了section属性,我可以传递info_section_html的HTML。但是无法通过代替数组传递数据。

有人可以建议如何克服这个问题吗?

1 个答案:

答案 0 :(得分:2)

我知道这已经很晚了,但是我遇到了同样的问题而无法找到答案,所以我认为在这里发布它可能会有用:

可在此处找到:SendGrid API v3

模式&#34; substitution_tag&#34;之后的键/值对的集合:&#34;替换&#34;的值。所有都被认为是字符串。除了主题和回复参数之外,这些替换将适用于电子邮件正文的文本和html内容。每个个性化对象的替换总集合大小不得超过10,000个字节。

所以这里没什么可做的。

对于这种用法,Sendgrid还有另一个名为 Sections 的功能(也请查看上面的链接)。它们的工作方式几乎与Substitutions类似,只是它们链接到整个邮件而不是Substitution

它们可以与Substitutions一起使用,以实现上述行为。

正如 mbernier 所说:Github issue related to the topic

您可以像这样使用它们:

    "personalizations: [
{
    "to: [{"email":"bob@example.com"}],
    "substitutions": {
        "[%product_info%]": "[%has_product%]",
    },
},
{
    "to":[{"email":"bob@example.com"}],
    "substitutions": {
        "[%product_info%]": "[%no_product%]",
    },
}],
"content": [
{
    "type": "text/plain",
    "value": "We just wanted to tell you that we appreciate you being a long time customer! [%product info%]"
}],
"sections": {
    "[%has_product%]": "Also, thanks for ordering:<br />[%product_section%].<br /> Are you ready to order again!?",
    "[%no_product%]": "You haven't ordered in a while, but we'd love it if you came back and saw our new products!"
}

这里最重要的是应该通过替换标签添加这些部分。

希望这有帮助