开发邮件相关功能(注册流程、通知系统、邮件解析)时,你需要大量测试邮箱。用真实邮箱测试麻烦且有风险,临时邮箱 API 是理想的测试方案。本文教你搭建自动化邮件测试环境。
为什么用临时邮箱做测试
传统测试邮件的方式有几种,各有缺陷:
| 方式 | 问题 | |------|------| | 用个人邮箱 | 数量有限、污染收件箱、有隐私风险 | | 自建邮件服务器 | 运维复杂、域名易被标记 | | 用 Gmail + 别名 | 数量受限、Google 可能封号 | | 临时邮箱 API | 无限地址、即用即弃、API 友好 |
临时邮箱 API 的优势:每个测试用例可以生成独立邮箱,互不干扰,测试完自动清理。
测试环境搭建
安装依赖
npm install node-fetch
封装测试工具
const API_BASE = "https://maliapi.215.im/v1";
const API_KEY = process.env.YYDS_API_KEY;
class TempMailTester {
async createAccount() {
const res = await fetch(`${API_BASE}/accounts`, {
method: "POST",
headers: { "X-API-Key": API_KEY },
});
const { data } = await res.json();
this.accountId = data.id;
this.address = data.address;
return data;
}
async getMessages() {
const res = await fetch(
`${API_BASE}/accounts/${this.accountId}/messages`,
{ headers: { "X-API-Key": API_KEY } }
);
const { data } = await res.json();
return data;
}
async waitForMessage(timeout = 30000) {
const start = Date.now();
while (Date.now() - start < timeout) {
const messages = await this.getMessages();
if (messages.length > 0) return messages[0];
await new Promise((r) => setTimeout(r, 2000));
}
throw new Error("等待邮件超时");
}
}
module.exports = { TempMailTester };
测试用例示例
测试注册流程
const { TempMailTester } = require("./temp-mail-tester");
test("用户注册后收到验证邮件", async () => {
const mail = new TempMailTester();
await mail.createAccount();
// 用临时邮箱注册
await registerUser(mail.address, "password123");
// 等待验证邮件
const message = await mail.waitForMessage();
// 断言邮件内容
expect(message.subject).toContain("验证");
expect(message.text).toMatch(/\d{6}/); // 含 6 位验证码
});
测试通知系统
test("订单创建后发送确认邮件", async () => {
const mail = new TempMailTester();
await mail.createAccount();
// 创建订单(用临时邮箱作为客户邮箱)
const order = await createOrder({ email: mail.address, items: [...] });
// 验证邮件
const message = await mail.waitForMessage();
expect(message.subject).toContain(order.id);
});
最佳实践
- 每个测试独立邮箱:不要复用邮箱,避免测试间污染
- 设置超时:邮件到达有延迟,设置合理超时(30 秒)
- 用 Webhook 替代轮询:CI 环境中用 Webhook 更可靠
- 清理测试数据:测试完删除临时邮箱,释放配额
- 注意配额:免费套餐有每日限额,大量测试用付费套餐
CI/CD 集成
在 GitHub Actions 中使用临时邮箱测试:
- name: Email integration test
env:
YYDS_API_KEY: ${{ secrets.YYDS_API_KEY }}
run: npm test -- --grep "email"
常见问题
测试会消耗 API 配额吗? 会。每个创建邮箱、查询邮件都算一次调用。免费套餐够小规模测试,大规模 CI 用付费套餐。
能测试邮件发送吗? 不能。YYDS Mail 是 receive-only。测试发信功能需要其他方案(如 Mailtrap)。
测试邮件会保留多久? 免费地址会话期间可用。测试完建议主动删除。
想搭建邮件测试环境?查看完整 API 文档,或阅读临时邮箱 API 入门。
