虚拟邮箱生成器

用加密随机数从 64 字符池拼装本地部分,搭配 RFC 2606 保留域名,批量生成格式合法但永不投递的测试邮箱地址,只用于开发与表单测试。

仅限测试用途:本页生成的地址一律不可收信——域名池全部来自 RFC 2606 / RFC 6761 保留域,这是设计目标而不是缺陷。禁止用生成地址注册真实账号或绕过实名验证。

脚本执行前,表格里显示的是 12 条固定演示值(长度 10/12/14/16 各 3 条);点「生成测试邮箱」后替换为随机批次。

生成结果(默认显示 12 行)
序号完整地址本地部分长度总长(octet)
1ok6daEP38J@mailbox.example1026
26jEdvKEVR1_Z@example.net1224
3Nmzu86n2xFs9K_@mailbox.test1427
4gpO4F7DRH7k-JNvv@mailbox.example1632
5yo7JoHzU3A@example.net1022
6FrVAsC2D98Hf@mailbox.test1225
7YuFk3aZqs2zwYr@example.com1426
8qxYJKOGsx_xKsf9H@mailbox.localhost1634
990O_NLYRfk@example.com1022
10QzKZyXCQovef@mailbox.test1225
11i2P10QD1ZROdh8@mailbox.example1430
1215Fr-qv5Ub4vW2-4@example.net1628

使用方法

  1. 在「域名」下拉框里选一个:前 4 个是保留 TLD(.test / .example / .invalid / .localhost),后 3 个是 IANA 持有的示例二级域(example.com/net/org)。默认 mailbox.test。
  2. 在「本地部分长度」里选 10、12、14 或 16 字符,默认 12 位,对应 72 bit 随机熵。
  3. 在「生成数量」里填 1 到 100 之间的整数,默认 20。填小数、0 或超过 100 都会被具体文案拦下。
  4. 点「生成测试邮箱」,或在数量框里按 Enter。结果表默认显示 12 行,点「加载更多」每次追加 12 行。
  5. 「复制全部」按制表符复制当前表格,「导出 CSV」下载带 BOM 的文件,Excel 打开中文列名不乱码。

这个虚拟邮箱生成器能解决什么

前端注册表单要验证邮箱格式正则写得对不对,需要一批「语法合法但不是真人」的样本。本页生成的每条地址都能过 local@domain 的基本格式检查,又因为域名全在 RFC 2606 保留列表里,永远不会真的投递出去,不会骚扰任何邮件服务器。

测试数据库需要批量占位邮箱(给用户表灌 100 条假数据跑分页和去重逻辑),本页一次最多 100 条,还给出每条的总长(octet),方便顺手测字段长度约束。

要区分「格式校验」和「可达性校验」两套逻辑时,本页的地址是现成的分界样本:你的系统如果对它们放行,说明只查了格式;如果直接拒收,说明接了 MX 或域名黑名单检查。

本页不做的事也要说清:它不提供可收信的临时邮箱(保留域在根区就没有 MX 记录,这是刻意设计);也不生成支付用测试卡号——虚拟邮箱和虚拟信用卡是两套完全不同的测试数据,后者请用虚拟信用卡号生成器。

原理与规则说明

虚拟邮箱生成器的本地部分由 crypto.getRandomValues 填充:每次取一个 32 位无符号整数,对 64 取余得到字符池下标。字符池是 62 个字母数字加 - 和 _ 共 64 个字符。池大小取 64 有一个特殊好处:232 = 67108864,恰好是 64 的整数倍,取模零偏差,连拒绝采样都不需要——如果池是 RFC 5322 atext 全集 81 个字符,232 % 81 = 49,直接取模会让 49 个字符各多出现一次,就得加拒绝采样循环。

字符池为什么砍掉点号、加号和其它符号:随机拼装很容易造出 a..b、.a、a.,违反 RFC 5322 §3.2.3 dot-atom 的三条硬约束(点不能开头、不能结尾、不能连续);加号在部分网关里是标签分隔符(a+b@ 会被投递到 a@),跨系统语义不稳定;引号串形式 "a b"@example.com 语法合法但被大量网关直接拒收。本页池里的 64 个字符怎么拼都不会违反 dot-atom 规则,生成的每条地址天然自洽。

长度档位 10/12/14/16 对应的随机熵是 6 bit/字符 × 长度,即 60 / 72 / 84 / 96 bit。作为对照:纯小写加数字的 36 字符池只有 5.17 bit/字符,同样 12 位只有 62 bit。生日碰撞可以忽略:最短的 10 位档地址空间约 8.07×1018,一次抽 100 条出现完全重复的概率在 10-13 量级,所以本页不做去重。

遵循的长度标准是 RFC 5321 §4.5.3.1.3:local-part 上限 64 octet,整个转发路径上限 254 octet;域名规则来自 RFC 1035 §2.3.4(每级标签 63 字符、全域名 253 字符)。本页最极端的输出是 16 位本地部分加 mailbox.localhost,共 34 octet,距 254 上限余量 220,怎么组合都合法。

域名池全部来自保留清单:.test、.example、.invalid 由 RFC 2606 §2 永久保留(ICANN 不会注册它们),.localhost 由 RFC 6761 §6 特指本机回环,example.com/net/org 由 RFC 2606 §3 指定为示例域。保留 TLD 在根区就没有 MX 记录,邮件会在 SMTP 握手阶段直接退信——「永不投递」是靠域名体系保证的,不是靠本页不发送。

完整示例(数值仅作演示)

首屏表格里 12 条是固定种子算出的演示值,本地部分 10/12/14/16 位各 3 条,域名覆盖 6 个保留域,最长的第 8 条 qxYJKOGsx_xKsf9H@mailbox.localhost 总长 34 octet。点「生成测试邮箱」后表格替换为随机批次。

自检你的邮箱正则:把这 12 条演示值喂给校验函数,应该全部通过;再把 .leading@example.com、trailing.@example.com、double..dot@example.com、has space@example.com、a@b@c 五条喂进去,应该全部拒绝。两条都符合,说明 dot-atom 规则实现正确。

熵的自查:12 位本地部分理论上 72 bit。如果你把数量拉到 100,用 new Set(结果).size 数一下,应当恰好 100——重复概率低到可以当 0 处理。

总长验证:任意一条结果的「本地部分长度 + 1 + 域名长度」都应等于表里的总长列,且不超过 254 octet(RFC 5321)。

输入范围与对照表

域名出处保留性质投递行为
mailbox.testRFC 2606 §2保留 TLD根区无 MX,SMTP 握手退信
mailbox.exampleRFC 2606 §2保留 TLD同上
mailbox.invalidRFC 2606 §2保留 TLD保证解析失败
mailbox.localhostRFC 6761 §6本机回环只在本机解析
example.comRFC 2606 §3IANA 示例域规范要求不收信
example.netRFC 2606 §3IANA 示例域同上
example.orgRFC 2606 §3IANA 示例域同上
本地部分长度随机熵(bit)12 位对照熵加上 @example.com 的总长
106062(36 池)/ 72(本页 64 池)22 octet
1272—24 octet
1484—26 octet
1696—28 octet

熵的计算口径:6 = log2(64),总熵 = 6 × 长度。对比数据来自同长度、36 字符池(小写加数字)的 5.17 bit/字符。两表合并导出 CSV 时带 BOM 头。

输入范围、边界与精度说明

数量只接受 1 到 100 的整数。空串会被单独拦下(Number('') 是 0,不能当合法值放行);小数如 20.5 会被 Number.isInteger 拒绝;0 和负数、超过 100 各有独立文案,都不会静默改成默认值。

长度只有 10/12/14/16 四档。不提供更短的档位是因为 8 位以下地址在测试库里太容易撞词(你手写的常量、日志里的截断值都会撞上);不提供更长的档位是因为 local-part 的 RFC 上限是 64 octet,再长就偏离真实约束,测试数据失真。

随机源是 crypto.getRandomValues,不是 Math.random()。后者是伪随机数,可预测且批量分布不均;本页一个字符消耗 6 bit 熵,单次 32 位取样的剩余 26 bit 直接丢弃(池 64 整除 232,丢弃不引入偏差)。页面必须在安全上下文(HTTPS 或 localhost)下才拿得到 crypto,拿不到会给出明确提示而不是悄悄换算法。

常见误用一:把生成的地址当临时邮箱收验证码。保留域没有 MX 记录,任何邮件都发不进来,这不是工具缺陷。需要真正可收信的测试邮箱,请使用邮件服务提供的测试收件箱功能。误用二:拿去注册真实账号或绕过实名——正规站点会在提交时校验 MX 或域名黑名单,直接拒绝;即便侥幸通过,也违反对方服务条款。误用三:把本页结果与虚拟信用卡号混为一谈——卡号有 Luhn 校验位算法且关联支付网关风控,邮箱地址没有任何校验位算法,两者是完全不同的测试数据。

常见问题

生成的地址能收到邮件吗?

不能,而且永远不能。域名池全部是 RFC 2606 / RFC 6761 保留域,根区没有 MX 记录,SMTP 服务器在握手阶段就会退信。「格式合法但不可投递」正是本页的设计目标。

和虚拟信用卡号生成器是什么关系?

没有关系,只是同属测试数据家族。信用卡号靠 Luhn mod 10 校验位自洽,用于支付表单测试;邮箱地址没有校验位算法,靠域名体系保证不可投递。用卡号的思路去理解邮箱,或反过来,都会得出错误结论。

为什么不能自定义域名?

自定义域名一旦是真实存在的域,地址就可能投递到真实邮箱,本页「永不骚扰真实收件人」的保证就失效了。个人域名还有到期回收风险,被他人注册后同名地址的行为完全不可控。

能用来注册网站账号吗?

不能。正规站点校验 MX 记录会直接拒绝保留域;不校验的站点也多半在条款里禁止,且你收不到任何验证邮件。绕过注册或实名验证不是本页支持也不应支持的用途。

为什么字符池里没有点号和加号?

点号受 RFC 5322 dot-atom 约束(不能开头、结尾、连续),随机拼装很容易违反;加号在部分网关是标签分隔符,跨系统语义不稳定。64 字符池怎么拼都合法,而且恰好整除 232,取模零偏差。

批量生成会重复吗?

实际不会。最短的 10 位档地址空间约 8×1018,抽 100 条出现重复的概率在 10-13 量级,本页因此不做去重表——为概率为零的事件付内存不值。

本地部分选多长合适?

12 位是默认值:72 bit 熵对任何测试场景都绰绰有余,总长 24 octet 也不逼近数据库字段上限。除非你要专门测字段长度边界,否则不用改。

生成记录会被上传或保存吗?

不会。随机数全部来自浏览器本地的 crypto API,没有任何网络请求;刷新页面后上一批结果即消失,不存在服务端存档。

相关工具

虚拟邮箱生成器只管「不可投递的测试地址」这一件事,同一族的其它测试数据各有专门页面。