临时邮箱服务的内部:一封邮件从 SMTP 到你屏幕的旅程
PureTempMail 团队
构建并运营 PureTempMail 的工程师
我们为什么公开自己的流水线
大多数一次性邮箱服务都是黑盒。你输入一个地址,邮件出现了,而中间发生了什么你一无所知——谁能看到这些消息、它们存储在哪里、是否真的会被删除。「临时邮箱服务可信吗?」这个问题的诚实答案完全取决于这些细节,所以我们决定逐个组件地记录 PureTempMail 究竟是如何运作的。
下文描述的都是此刻正在支撑这个网站的生产系统,由构建并运营它的团队亲自撰写——不是简化的营销示意图。凡是做了取舍的地方,我们都会说明取舍是什么、为什么这样选。
第 1 步:SMTP 握手——大部分垃圾死在这里
互联网上的每封邮件都始于一次 SMTP 对话。在我们的边界上,一台经过加固的 SMTP 服务器监听 25 端口,对支持的发件方启用 TLS。当一台邮件服务器连接进来并声明收件人时,我们不会盲目接收消息。
在 RCPT TO 阶段——在消息内容传输哪怕一个字节之前——我们会将收件地址与活跃邮箱列表进行核对。如果没有人生成过这个地址,或者邮箱已经过期,连接会当场被以永久性 SMTP 错误拒绝。我们绝不会先接收再悄悄丢弃。这种早期拒绝也体现了一个刻意的设计约束:PureTempMail 只收不发。没有任何办法从 PureTempMail 地址发送邮件,这意味着这项服务无法被滥用于垃圾邮件、钓鱼或骚扰。
第 2 步:接收与处理之间的队列
被接受的消息不会在 SMTP 服务器内部解析。原始邮件会被送入消息队列,SMTP 对话随即结束。原因在于时间:发送方服务器期望在几秒内得到响应,而解析一封带附件的大邮件可能耗时长得多。将两者解耦意味着来信洪峰绝不会导致超时或丢件——队列吸收峰值,消费者按序处理。
这个消费者解析原始 MIME 结构:提取主题、发件人、HTML 与纯文本正文以及附件。附件以随机生成的名称写入隔离存储——绝不使用发件人指定的文件名,这直接封死了整整一类路径操纵攻击。消息的元数据和正文写入数据库,并与邮箱的过期时间绑定。
第 3 步:净化 HTML,让营销邮件无法追踪你
HTML 邮件是任何收件箱中最危险的部分。一封典型的营销邮件包含远程图片(报告你何时何地打开邮件的追踪像素)、外部样式表,有时还有脚本。在邮件展示给你之前,它会经过一个使用严格白名单的 HTML 净化器:脚本被剥离,外部资源被彻底移除,只有安全的内联样式得以保留。追踪像素根本不会被加载,因此发件人无法得知邮件是否被打开。

净化后的结果随后在浏览器中一个完全沙箱化的 iframe 里渲染。即使有恶意内容侥幸通过了净化,沙箱也会阻止它触及周围的页面、你的邮箱会话或浏览器中的任何其他东西。
第 4 步:通过 Server-Sent Events 实时送达
大多数临时邮箱网站要么让你刷新页面,要么每隔几秒轮询一次服务器。PureTempMail 则从你的浏览器保持一条使用 Server-Sent Events(SSE)的长连接 HTTP 通道。消费者一完成消息入库,事件就会通过这条连接推送出去,邮件随即出现在你的收件箱里——通常在发件方发送后一到三秒。对于双因素验证码和有效期很短的激活链接这类分秒必争的场景,这几秒钟至关重要。
连接会发送周期性心跳以便发现断开的连接;网络中断时,客户端会以指数退避自动重连。同一事件流也驱动着我们的 Android 和 iOS 应用,因此所有平台会在同一时刻看到新消息。
第 5 步:过期意味着真正的删除
每个邮箱创建时都带有一个屏幕上可见的倒计时,在邮箱有效期间你可以延长它。一旦过期,每隔几分钟运行一次的清理任务就会接手:先从磁盘上删除附件文件,再级联删除该邮箱及其所有消息的数据库记录。
没有归档,没有过期邮件的备份,也没有让数据隐形留存的「软删除」标记。这是由架构而非仅由政策强制执行的数据最小化:已经不存在的东西,我们无法交出、无法泄露、也无法丢失。
这就是完整的旅程——一次 SMTP 握手、一个队列、一个解析器、一个净化器、一次推送事件和一个删除任务。每个环节的存在,都是为了让一个你只用十分钟的地址在之后不让你付出任何代价。如果你哪天怀疑某个一次性邮箱服务在对你的消息做什么见不得人的事,就请它公开自己的流水线。我们刚刚公开了。
想看这条流水线的简短非技术版本? 逐步了解 PureTempMail 的工作原理