构建电子邮件归档系统:挑战与解决方案 - 第1部分
杰夫·戈德斯坦
2019年2月4日
电子邮件
1 min read

关键要点
Email archiving 是日益重要的,特别是在监管、合规和审计环境中。
SparkPost 不存储邮件正文,但其 Archive feature 允许发送者接收与跟踪链接和内容相吻合的重复消息。
邮件正文可以存储在 Amazon S3 中,而消息事件元数据可以存储在 MySQL 中以供查询和交叉引用。
SparkPost 消息事件提供丰富的活动日志(退信、投递、点击、打开、退订、投诉等)。
只有通过 SMTP 发送邮件时才会生成档案副本。
原始邮件、档案邮件、CC 和 BCC 邮件的消息事件共享一个 transmission_id。
入站邮件中继可以摄取档案消息,但不包括 transmission_id ,这造成了数据链接的挑战。
在消息正文中嵌入 hidden unique identifier (UID) 可以弥补这一差距,将入站内容与出站日志联系起来。
结合档案邮件和消息事件可以建立一个可搜索的、可审核的档案系统。
长期项目包括在 S3 中存储档案邮件和在 MySQL 中记录事件数据的代码发布。
最终应用程序将允许轻松搜索、查看和协调邮件内容与所有相关事件历史。
非常适合那些需要全面了解每封发送邮件的合规性重工业。
Q&A 精华
为什么构建自己的电子邮件归档系统?
受监管行业通常需要长期存储电子邮件正文及所有相关的事件日志。SparkPost 不存储消息正文,因此建立自定义系统以确保合规性、审计和可见性。
您如何获取原始发送电子邮件的精确副本?
SparkPost的Archive feature会将每封外发电子邮件的副本发送到指定的存档地址,保留所有编码链接和跟踪行为。
为什么您无法在发送前捕获电子邮件正文?
预发送捕获不包括SparkPost的修改(打开跟踪、点击跟踪、链接编码)。使用Archive副本确保您的保存版本与收件人收到的内容完全匹配。
SparkPost会自动归档电子邮件吗?
不。SparkPost 不存储消息正文。必须在 SMTP 注入期间通过指定存档地址来请求存档副本。
在这个归档系统中,哪些内容存储在何处?
Email body → Amazon S3
Message event logs → MySQL
这种分离支持快速搜索、结构化查询和低成本对象存储。
SparkPost 会保留事件数据多长时间?
SparkPost 存储消息事件10天。之后,数据必须通过 webhook 获取或查询并存储在其他地方。
有哪些消息事件可用?
SparkPost 目前公开 14 个事件,包括 deliveries、bounces、clicks、opens、rejections、policy issues、spam complaints、unsubscribes, 和更多。
什么标识符将所有事件联系在一起?
所有外发邮件(原件、存档、CC、BCC)共享相同的transmission_id。原件和存档邮件也共享相同的message_id。
为何入站处理是一个挑战?
SparkPost 的入站电子邮件中继将入站电子邮件转换为 JSON,但此 JSON 不包括 transmission_id。没有额外的数据,入站副本无法链接到其出站日志历史。
如何将入站存档电子邮件连接到出站消息事件?
在电子邮件正文中嵌入一个隐藏的unique identifier (UID),并在元数据中传递相同的UID。这个UID成为入站和出站记录之间的共享引用。
入站电子邮件中继如何帮助自动化存档?
它接收发送到您存档域的档案邮件,将它们解析为结构化的JSON,并通过webhook发布到您的应用程序——允许自动提取和存储。
这个项目的长期愿景是什么?
一个完整的应用程序:
在 S3 中存储归档邮件
在 MySQL 中存储所有事件日志
允许用户搜索邮件
在一个统一界面中显示原始邮件及每个相关事件





