在 SendGrid 电子邮件模板中遍历数组
Iterating through array in SendGrid email template
我正在尝试遍历 collection 并在 Rails 上使用 Ruby 在 SendGrid 模板中显示信息。
recipient = SendGrid::Recipient.new("sergio@gmail.com")
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><%body%></div>
<div>username</div>
<div>numbers</div>
<p>This is a small example email.</p>
</body>
</html>
如何在 SendGrid 模板中遍历通用数组或 object?对于这个特定示例,用户有很多 posts
,我只想在 <li>
元素中显示用户帖子的标题。
我只是尝试使用简单的数字数组来了解 SendGrid 的工作原理。
遗憾的是,目前 SendGrid 提供的模板非常少。模板不支持数组作为值,并且没有条件或循环控件,因此您需要在构建模板和模板内容之前预先确定所有内容。即将推出更强大的模板系统。
更新
SendGrid 现在支持动态模板!
您可以在他们的博客上阅读:
https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
旧答案:
搜索此结果如下 GitHub issue。所以 SendGrid 不可能(还?)。
但是还有其他方法可以做到这一点。使用 sendwithus 您可以访问功能更强大的模板编辑器,它支持循环和迭代。
只需使用您自己的 SendGrid API 键进行设置,您就可以使用 sendwithus 模板中的数组,该模板将使用 SendGrid 发送邮件。
这是一个解决方法 Sendgrid 尚未为此更新其模板引擎
大家好,我需要在我的 sendgrid 邮件中进行一些迭代,运行 解决这个问题,现在我有一个解决问题的临时解决方法。这是我解决它的方法
- 创建了一个 txt 文件并在其中加载了我的 html 模板
- 注意我想迭代的区域我用 sendgrid 变量替换,例如 %list of items%
- 将 txt 文件读入字符串创建字符串生成器并将所有迭代对象传递到 %list of items% 变量
然后通过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
2018 年 8 月更新:
Sendgrid 现在使用 handlebars 提供来自交易电子邮件的迭代器,这里是文档以获取更多信息:
https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/#basic-iterator
{{#each data.products}}
{{name}}: {{price}} <br/>
{{/each}}
{"data":{"products": [{"name": "Tomato", "price": "5"}, {"name": "Banana", "price": "8"}]}}
迭代数据示例:
{
"people":[{"name":"Bob"},{"name":"Sally"}]
}
代码:
{{#if people}}
<p>People:</p>
{{#each people}}
<p>{{this.name}}</p>
{{/each}}
{{/if}}
结果:
人数:
鲍勃
莎莉
"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>
我正在尝试遍历 collection 并在 Rails 上使用 Ruby 在 SendGrid 模板中显示信息。
recipient = SendGrid::Recipient.new("sergio@gmail.com")
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><%body%></div>
<div>username</div>
<div>numbers</div>
<p>This is a small example email.</p>
</body>
</html>
如何在 SendGrid 模板中遍历通用数组或 object?对于这个特定示例,用户有很多 posts
,我只想在 <li>
元素中显示用户帖子的标题。
我只是尝试使用简单的数字数组来了解 SendGrid 的工作原理。
遗憾的是,目前 SendGrid 提供的模板非常少。模板不支持数组作为值,并且没有条件或循环控件,因此您需要在构建模板和模板内容之前预先确定所有内容。即将推出更强大的模板系统。
更新
SendGrid 现在支持动态模板!
您可以在他们的博客上阅读: https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
旧答案:
搜索此结果如下 GitHub issue。所以 SendGrid 不可能(还?)。
但是还有其他方法可以做到这一点。使用 sendwithus 您可以访问功能更强大的模板编辑器,它支持循环和迭代。
只需使用您自己的 SendGrid API 键进行设置,您就可以使用 sendwithus 模板中的数组,该模板将使用 SendGrid 发送邮件。
这是一个解决方法 Sendgrid 尚未为此更新其模板引擎
大家好,我需要在我的 sendgrid 邮件中进行一些迭代,运行 解决这个问题,现在我有一个解决问题的临时解决方法。这是我解决它的方法
- 创建了一个 txt 文件并在其中加载了我的 html 模板
- 注意我想迭代的区域我用 sendgrid 变量替换,例如 %list of items%
- 将 txt 文件读入字符串创建字符串生成器并将所有迭代对象传递到 %list of items% 变量
然后通过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
2018 年 8 月更新:
Sendgrid 现在使用 handlebars 提供来自交易电子邮件的迭代器,这里是文档以获取更多信息:
https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/#basic-iterator
{{#each data.products}}
{{name}}: {{price}} <br/>
{{/each}}
{"data":{"products": [{"name": "Tomato", "price": "5"}, {"name": "Banana", "price": "8"}]}}
迭代数据示例:
{
"people":[{"name":"Bob"},{"name":"Sally"}]
}
代码:
{{#if people}}
<p>People:</p>
{{#each people}}
<p>{{this.name}}</p>
{{/each}}
{{/if}}
结果:
人数:
鲍勃
莎莉
"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>