循环访问 SendGrid 电子邮件模板中的数组

Iterating through array in SendGrid email template

提问人:Sergio Tapia 提问时间:12/28/2015 最后编辑:Brian Tompsett - 汤莱恩Sergio Tapia 更新时间:11/17/2023 访问量:32651

问:

我正在尝试使用 Ruby on Rails 遍历集合并在 SendGrid 模板中显示信息。

recipient = SendGrid::Recipient.new("[email protected]")
recipient.add_substitution("username", user.github_id)
recipient.add_substitution("numbers", [1,2,3,4])

在 gmail 中,此模板以以下方式提供:

sergiotapia
ARRAY(0x85b9d90)

模板的实际代码,从 SendGrid 的编辑器中复制:

<html>
  <head>
    <title></title>
  </head>
  <body>
    <div>&lt;%body%&gt;</div>

    <div>username</div>

    <div>numbers</div>

    <p>This is a small example email.</p>
  </body>
</html>

如何循环访问 SendGrid 模板中的泛型数组或对象?对于这个特定示例,一个用户有很多,我只想在元素中显示用户帖子的标题。posts<li>

我只是用一个简单的数字数组来尝试一下,看看它是如何工作的 SendGrid。

电子邮件 sendgrid 替换 电子邮件

评论


答:

0赞 bwest 12/28/2015 #1

不幸的是,SendGrid 目前提供的模板非常少。模板不支持数组作为值,并且没有条件或循环控件,因此您需要在生成模板和模板内容之前预先确定所有内容。更强大的模板系统即将推出。

评论

0赞 Sergio Tapia 12/28/2015
youtube.com/watch?v=09s-c2JVI40 - 我是否可以发送一个大字符串并在模板中替换它?我可以在 Rails 中循环和渲染,并将该块发送到模板中进行替换。那是犹太洁食吗?
0赞 bwest 12/28/2015
是的,这是一个很好的方法,这里有一个类似的例子
8赞 Maria Ines Parnisari 8/27/2016
这个答案是否仍然有效,或者 SenGrid 是否实现了循环?
2赞 Chrono 10/3/2016 #2

更新

SendGrid 现在支持动态模板!

您可以在他们的博客上阅读相关信息: https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/

旧答案:

搜索此问题会导致以下 GitHub 问题。因此,使用 SendGrid 是不可能的(还?

但是,还有其他方法可以做到这一点。使用 sendwithus,您可以访问支持循环和迭代的更强大的模板编辑器。

只需使用您自己的 SendGrid API 密钥进行设置,您就可以使用 sendwithus 模板中的数组,该数组将使用 SendGrid 发送邮件。

0赞 chukwuka mark 3/12/2018 #3

这是一个解决方法 Sendgrid 尚未为此更新其模板引擎

大家好,我需要在我的 sendgrid 邮件中进行一些迭代,现在遇到了这个问题,我有一个时间解决方法可以解决这个问题。这是我如何解决它的方法

  • 创建了一个 TXT 文件并在那里加载了我的 HTML 模板
  • 请注意我想迭代的区域,我用 sendgrid 变量替换,例如 %list of items%
  • 将 txt 文件读入字符串创建字符串生成器并将所有迭代对象传递到 Items% 变量的 %List 中

然后通过 SendGrid 将整个字符串内容作为消息发送

public void sendSimpleMessage(String message,
                String subject, 
                String toEmail,
                String fromEmail){
                 Email from = new Email(fromEmail);
                 Email to = new Email(toEmail);
                 Content content = new Content("text/html", message);
                 Mail mail = new Mail(from, subject, to, content);


                 SendGrid sg = new SendGrid(sendgridApiKey);
                 Request request = new Request();
                 try {
                      request.method = Method.POST;
                      request.endpoint = "mail/send";
                      request.body = mail.build();
                      sg.api(request);
                 } catch (IOException ex) {
                      ex.printStackTrace();
                }
        }

希望它能帮助 https://github.com/sendgrid/sendgrid-nodejs/issues/221#issuecomment-361489007 的人

21赞 Daniel Disblu 8/28/2018 #4

2018 年 8 月更新:

Sendgrid 现在使用车把提供来自事务性电子邮件的迭代器,以下是文档以获取更多信息:

https://docs.sendgrid.com/for-developers/sending-email/using-handlebars#iterations

模板

<ol>
  {{#each user.orderHistory}}
   <li>You ordered: {{this.item}} on: {{this.date}}</li>
  {{/each}}
</ol>

测试数据

{
  "user": {
    "orderHistory": [
      { "date": "2/1/2018", "item": "shoes" },
      { "date": "1/4/2017", "item": "hat" }
    ]
  }
}

生成的 HTML

<ol>
  <li>You ordered: shoes on: 2/1/2018</li>
  <li>You ordered: hat on: 1/42017</li>
</ol>
6赞 Tymur Abdullaiev 5/10/2019 #5
{{#each data.products}}
    {{name}}: {{price}} <br/>
{{/each}}

{"data":{"products": [{"name": "Tomato", "price": "5"}, {"name": "Banana", "price": "8"}]}}

评论

4赞 Dima Kozhevin 5/10/2019
虽然此代码可以回答问题,但最好解释如何解决问题并提供代码作为示例或参考。纯代码答案可能会令人困惑且缺乏上下文。
18赞 Schroet 7/10/2019 #6

迭代数据示例:

{
  "people":[{"name":"Bob"},{"name":"Sally"}]
}

法典:

{{#if people}}
  <p>People:</p>
  {{#each people}}
    <p>{{this.name}}</p>
  {{/each}}
{{/if}}

结果:

人:

鲍勃

莎莉

1赞 Shashwat Gupta 3/12/2021 #7
        "businessContributors" : [
                    {
                        "total" : {
                            "amount" : 11340,
                            "title" : "Dhama Ji Total"
                        },
                        "list" : {
                            "Dhama Ji Paid" : -296310,
                            "HDFC Account" : 0,
                            "Dhama Ji Received" : 307650
                        },
                        "title" : "Dhama Ji Owner Account"
                    },
                    {
                        "total" : {
                            "amount" : -1270,
                            "title" : "Rahul Total"
                        },
                        "list" : {
                            "Rahul Paid" : 243838,
                            "Rahul Received" : 242568
                        },
                        "title" : "Rahul Account"
                    },
        ]
    
    
   in email template  :-

 
     <h4>Business Contributors </h4>
            <ul>
                {{#each businessContributors}}
                <li> {{this.title}} <br>
                    {{#each this.list}}
                     {{@key}} = {{this}} <br>
                {{/each}}  </li>
                

      
         
                <hr style="height: 2px; background-color: black;"><br>
                <h2>{{this.total.title}}</h2><br>
                <h2>{{this.total.amount}}</h2>
                <br><br>
            {{/each}}
            </ul>