高级电子邮件模板
鸟
2016年3月25日
电子邮件
1 min read

关键要点
SparkPost模板支持简单和高级电子邮件撰写,包括HTML、文本、条件逻辑、循环和通过替换变量的每个接收者动态数据。
数组可以传递到替换数据中,允许您遍历项目(例如,文件列表、最近活动、自定义表格行)以为每个接收者生成个性化的部分。
三重大括号
{{{ }}}允许您插入原始的、未转义的HTML,当您的替换数据已经包含标记时,这是必需的。使用传输端点(
content.attachments)时可以轻松发送附件,这将为您抽象MIME边界和编码。内联图像与附件类似,但使用
cid:引用在正文中呈现。模板本身不原生支持附件,但您可以通过制作完整的RFC 5322带有MIME部分的电子邮件并将其存储为
email_rfc822模板来包含它们。在构建原始RFC 5322模板时,替换仍然有效—但仅在头部和第一个HTML和文本MIME部分中。
使用您编程语言的邮件客户端(例如,JavaMail)提供了另一种路径:以编程方式生成完整MIME电子邮件,并通过SparkPost传输API发送。
为了可维护性,尽可能将标记和数据分开——尤其是构建包含循环或多个MIME部分的模板时。
高级模板功能(条件、表达式、数组迭代)允许开发人员构建复杂的、个性化的电子邮件,而无需为每个用例重写整个模板。
Q&A 精华
SparkPost 模板可以处理 loops 和 arrays 吗?
是的。模板可以使用
for each构造遍历数组。这使得可以为每个收件人生成动态表格、列表或重复的HTML块。三个大括号用于什么?
{{{ variable }}}插入未经转义的原始 HTML。当您的替换数据已经包含 HTML 标记时,这是必需的。Can I send attachments with templates?
不能直接通过模板字段 — 但您可以通过存储包含 MIME 附件部分的
email_rfc822模板来实现。替换在RFC 5322模板中仍然有效吗?
是的,但仅限于标头和第一个HTML +文本MIME部分内。
我什么时候应该使用传输端点而不是模板?
当发送动态附件、内嵌图片或需要SparkPost自动处理MIME时。
将视图逻辑嵌入更好还是单独保持分离更好?
最佳做法是将视图标记和数据保持分离。使用模板进行展示,并传递干净、结构化的替换数据。
我可以使用编程库生成完整的MIME电子邮件吗?
是的。像 JavaMail 这样的库允许您通过程序构建 RFC 5322 消息并通过 SparkPost 的传输 API 发送。
高级模板功能是否被广泛使用?
令人惊讶的是,很少有开发者使用它们,但它们能够解锁强大的个性化功能:循环、条件语句、内联逻辑和自定义 MIME 结构。
为什么我会需要 RFC 5322 templates?
仅在发送复杂的多部分电子邮件(附件、自定义 MIME 类型)时,SparkPost 的标准模板抽象不支持。
这篇文章是针对希望充分利用SparkPost 的电子邮件模板功能的开发人员编写的。假设您对阅读 JSON 内容和遵循基本编程流程感到舒适。当引入可能对您来说陌生的术语时,例如RFC 5322,文本将链接到其来源参考。
准备好了,我们就直接开始吧。
SparkPost 的模板和传输能力使发送电子邮件变得简单。那些功能为文本和HTML内容提供了抽象,这意味着大多数时候无需直接编码由RFC 5322(以前称为RFC 822)定义的原始电子邮件格式。但有时您可能希望创建更复杂的消息,这些消息具有其他多用途互联网邮件扩展(MIME)部分,这些部分并未通过 SparkPost 的 RESTful 接口直接公开。
简化 Email Composition
首先,让我们回顾一下在晴天发送电子邮件的场景。使用transmission端点提供 text 和 HTML 内容。在后台,SparkPost负责组成有效的RFC 5322电子邮件。SparkPost将从substitution_data中插入替换变量到文本和HTML内容中。这是一种为每个收件人在通用模板中生成自定义内容的强大方式。
这是一个包含HTML和文本内容以及substitution_data的transmission示例。
替换数据数组
Transmission Capabilities 中的 Attachments
传输端点还提供了发送附件的抽象。 下面您将看到附件是在 content.attachments 数组中指定的,其中数组中的每个对象描述一个单独的附件项。就像之前一样,SparkPost 将负责编码text、HTML、substitutions 并迭代通过附件数组来编码一个格式正确的电子邮件消息。
最佳实践规定,除非显式要求作为您的服务的一部分,否则最好避免发送附件。
以下是附件所需的字段:
type: 附件的 MIME 类型
name: 附件的文件名
data: Base64 编码的文件数据
这就是传输内容节中附件的样子:
您还可以在传输中发送“内联图像”。这些和附件非常相似,指定在 content.inline_images 数组中,其中每个 inline_image 对象与上面显示的附件对象类似。
模板中的Attachments
现在,我们已经为使用传输端点发送附件做好了适当的背景准备,让我们看看如何使用模板来执行此操作。在撰写本文时,没有像您在内联传输中找到的附件抽象。有人可能会得出结论,模板无法创建带有附件的内容。你部分正确,但有解决方法,尽管你将不再与RFC 5322格式隔离。
您可以通过亲自编码RFC 5322内容来实现模板中的附件,包括该附件。好消息是,您不会失去在电子邮件头、HTML 和文本部分中仍然使用 替换数据 的能力。请注意,这种类型的模板将替换限制在头以及第一个HTML和第一个文本部分。
以下是如何完成的示例。
RFC822 邮件
创建您的 RFC 5322 电子邮件,并包含您想要替换的数据。我在我的邮件客户端中创建了这个,并发送给自己。收到后,我复制了源代码并替换了我想动态替换的字段。
在此消息的最后一个 MIME 部分中,您将看到 Content-Disposition: attachment; filename=myfile.txt”。这就是定义文件名的位置。您的附件内容肯定会复杂得多,但此示例试图保持简单。
Stored Template
一旦您拥有有效的 RFC 5322 邮件,就使用模板端点的email_rfc822格式来存储它,而不是使用text和HTML字段。以下是此消息的content示例:
请求完成后,SparkPost将返回您的新模板的唯一标识符。例如xxxxxxx。
发送模板
好消息是创建 RFC 5322 内容是困难的部分。从现在开始,使用 SparkPost 发送该模板与发送任何其他模板完全相同。
以下是我们如何发送该模板并填充替换数据:
来自邮件客户端 API 的模板
如果您正在使用一种具有电子邮件编写库的编程语言,您可以使用它来以编程方式创建模板,甚至内联发送消息。 以下是使用JavaMail通过SparkPost的传输端点的示例。该方法应该可以轻松转换为PHP或您选择的语言。
结论
现在您已经了解SparkPost如何用于发送几乎任何复杂性的电子邮件,您可能会想看看“SparkPost Supports Sending Email on Apple Watch”或查看替换语法,以了解如何在您的模板或传输内容中使用“if then else”、“条件表达式”或“数组迭代”。



