临时邮箱原理其实不神秘:它用的还是互联网上最基础的那套邮件投递机制,只是把「收到信之后放多久、给谁看」换成了自己的规则。读完这一篇,你会知道一封信从发件人按下发送到出现在收件箱之间发生了什么,也能明白为什么有些信会迟到、会来两遍,甚至永远收不到。
一封信要经过哪几步才到收件箱
先看一件最基础的事:一个邮箱地址被「@」分成两半,前半是本地部分,后半是域名。本地部分决定这封信投给这个域名下的哪个信箱,域名则指向一套收信服务。
发信方的服务器在投递之前,要先查这个域名的收信服务器记录——一条公开写在域名系统里的信息,等于告诉全世界「发给这个域名的邮件请投到哪台服务器」。查到之后,它建立连接、把信交出去,对方的服务器收下并放进对应信箱,收件人这边再通过网页或客户端把它取出来。
链路上任何一步失败,信都送不到:查不到记录、对方服务器不响应,或者对方直接拒收。这也解释了为什么「显示发送成功」不等于「对方收到了」——发信方只能确认自己把信交出去了,后面的路它管不着。
临时信箱在这条链路上换了什么
临时邮箱并没有发明新的投递方式,它换的是收信方这一侧的角色。普通邮箱的域名属于某个长期运营的邮件服务,信箱和你的账号绑定;临时邮箱的域名指向一套按需生成信箱的服务,你访问时先分配到一个地址,信投到这个地址上就落进临时收件箱。
这个差别带来三个结果。第一,收信方不需要知道你是谁,所以不需要注册。第二,信箱是短期的:服务方通常只保留几分钟到几小时,具体时长由服务方自己决定,没有统一标准。第三,信件的删除是设计的一部分,而不是意外。
- 收信方不需要知道你是谁,所以不需要注册
- 信箱是短期的:服务方通常只保留几分钟到几小时,具体时长由服务方自己决定,没有统一标准
- 信件的删除是设计的一部分,而不是意外
理解这一点之后,很多现象就顺理成章了:为什么换了新地址之后旧信不见了,为什么关掉页面回来可能已经过期,为什么同一封信不能像普通邮箱那样归档。
为什么一次性邮箱过期后就找不回来?
因为临时信箱从设计上就没有「归属」这一步。普通邮箱背后有一个属于你的账号,服务方需要长期保存邮件,并提供找回密码、恢复访问的路径;临时信箱背后什么都没有,过期即删除,服务方也没有义务替你留着。
对读者来说,这条规则的推论很直接:不要把任何以后需要的东西放进临时邮箱。验证码是一次性的,用完就没用;但发票、行程单、账号恢复邮件都不属于这一类,它们应该进你长期维护的邮箱。
另一条推论有关隐私:共享式的临时收件箱可能谁打开页面谁就能看到内容,所以别用它接收含个人信息的邮件,也别把它当成和真人通信的地址。
关于「过期即删除」,可以记住这几点:
- 不要把任何以后需要的东西放进临时邮箱:验证码是一次性的,用完就没用
- 发票、行程单、账号恢复邮件都不属于这一类,它们应该进你长期维护的邮箱
- 共享式的临时收件箱可能谁打开页面谁就能看到内容
- 别用它接收含个人信息的邮件,也别把它当成和真人通信的地址
延迟和重复投递算故障吗?
不算。邮件投递本质上是异步的:发信方把信交给下一站之后就不管了,中途可能排队、可能重试,收信方看到的到达时间因此会有波动。同一封信来两遍也很常见,通常是因为发信方没有及时收到确认,于是又投了一次,而收信方对这种情况的处理方式就是允许重复。
所以「等固定秒数再断言」是坏做法:等太短会误判失败,等太长会拖慢整个测试,而且两种结果都不稳定。合理的做法是轮询——反复检查信箱,直到出现,或者超过你预先设好的上限。
看清这一点,你也就不会再把「信还没到」当成系统坏了。它只是还在路上。
在本站的临时邮箱里看一封信怎么到达
打开临时邮箱,生成一个地址,把它填进某个注册页面。页面会停在收件箱上,收到的邮件自动出现;信到了之后,你能看到发件人、主题和正文,其中的验证码会被单独提取出来方便复制。
想亲手验证一次延迟是不是常态,可以用同一个地址再注册另一个网站,比较两封信到达的先后。你会发现顺序并不总与发送顺序一致,这不是哪里坏了,而是投递本身的性质。
给开发者:有效期与轮询间隔怎么定
有效期由业务决定,不由测试决定:如果用例需要在一小时后回看这封信,就不能把它放在会过期的临时信箱里。常见做法是给每个用例一个独立地址,让「这封信属于哪个用例」不依赖任何猜测。
轮询要设上限,并且上限写成可以配置的参数,而不是散落在用例里的固定等待。到达即通过,超时即失败,并在失败时保留当时的收件箱快照,这样现场才可复盘。
还有一条:不要测「邮件在几秒内到达」。投递延迟不是你能控制的变量,断言它等于断言网络的运气。要测的是状态机,例如验证入口在收到正确令牌前后分别表现如何;这一步在邮箱验证测试里有更细的拆法。
从发出到看见,中间还会有哪些意外
知道信会被投递过来,不等于知道它会怎么到。常见的意外有四类,提前有预期就不会误判成故障。第一类是延迟:链路中间可能有排队,信晚到几分钟是正常的,所以等待要写成轮询,而不是假定某个时刻一定会出现。第二类是重复:同一封信可能被投递两次,解析时要注意去重,别把它当成系统发了两次通知。
第三类是被判为垃圾或直接被拒。临时信箱用的域名通常不在收件方的白名单里,因此被拒的概率比常用邮箱高;遇到这种情况,地址本身没错,只是对方不收。第四类是附件:附件大小与类型由收信服务自己决定,能收什么不能收什么,最好在动手之前先试一次。
还有一点值得记住:地址一旦失效,之后发来的信不会排队等你回来,而是永久丢失。所以别把唯一一份重要内容留在一个临时地址里,需要留档的内容要及时转走。
下一步
如果你只是想确认一条投递链路是否通畅,直接去临时邮箱生成地址,实际收一封信最快。想进一步理解它的代价和适用边界,可以读一次性邮箱是什么;在持续集成里不想连外网发信的做法,见测试环境里怎么捕获邮件。
这里生成的地址只用于测试收信,不能用来冒充他人,也不能作为长期联系方式。