从 Mailtrap 迁移到 Mailexam¶
Mailtrap 与 Mailexam 解决同一问题:在开发、QA 和 CI/CD 中拦截外发邮件,避免投递给真实收件人。迁移只需更换 SMTP 参数,必要时更新测试中的 API 调用。发送代码(Mail、Nodemailer、Action Mailer 等)无需修改。
概览¶
| Mailtrap Sandbox | Mailexam | |
|---|---|---|
| 用途 | 测试 SMTP 收件箱 | 测试 SMTP 收件箱 |
| 主机 | sandbox.smtp.mailtrap.io |
{login}.mailexam.cn |
| 端口 | 25、2525、465、587 |
25、2525、465、587 |
| 用户名 | 每个 sandbox 独立 | 每个项目独立 |
| 密码 | 与 sandbox 用户名配对 | 与项目用户名配对 |
| SMTP 认证 | 必需 | 必需(PLAIN) |
| CI/CD API | 支持 | 支持 |
推荐端口
两个服务都建议使用 587 + TLS(STARTTLS)。若运营商封锁 25 端口,请使用 2525。
准备工作¶
步骤 1. 获取 Mailexam 凭据¶
注册后,欢迎邮件(或控制台)提供三个值:
| 参数 | 示例 | 说明 |
|---|---|---|
| 登录名 | abc123 |
项目 SMTP 用户名 |
| 密码 | •••••••• |
与登录名唯一配对 |
| 主机 | abc123.mailexam.cn |
与登录名一致 |
通用 SMTP 参数详见集成示例。
步骤 2. 更换 SMTP 设置¶
在项目中找到 Mailtrap 变量,替换为 Mailexam 值。变量名可能不同 — 关键是主机、端口、用户名、密码。
迁移前(Mailtrap)¶
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_mailtrap_username
MAIL_PASSWORD=your_mailtrap_password
MAIL_ENCRYPTION=tls
迁移后(Mailexam)¶
MAIL_HOST=YOUR_LOGIN.mailexam.cn
MAIL_PORT=587
MAIL_USERNAME=YOUR_LOGIN
MAIL_PASSWORD=YOUR_PASSWORD
MAIL_ENCRYPTION=tls
发件人地址
MAIL_FROM_ADDRESS / MAIL_FROM 可保持任意测试地址 — 邮件进入 Mailexam,而非真实收件人。
参数对照¶
| 参数 | Mailtrap | Mailexam |
|---|---|---|
| 主机 | sandbox.smtp.mailtrap.io |
{login}.mailexam.cn |
| 端口 | 2525(或 587) |
587(推荐) |
| 用户名 | sandbox Integration 选项卡 | 欢迎邮件 |
| 密码 | sandbox Integration 选项卡 | 欢迎邮件 |
| 加密 | TLS / STARTTLS | TLS / STARTTLS |
各技术栈指南¶
完整代码片段见示例目录:
| 技术栈 | 页面 |
|---|---|
| Laravel | Laravel |
| Django | Django |
| Node.js / Nodemailer | Node.js |
| Ruby on Rails | Ruby on Rails |
| Spring Boot | Spring Boot |
步骤 3. 更新 CI/CD¶
若流水线存储 Mailtrap 密钥,请替换为 Mailexam:
| 迁移前(Mailtrap) | 迁移后(Mailexam) |
|---|---|
MAILTRAP_USER / MAILTRAP_USERNAME |
MAILEXAM_LOGIN |
MAILTRAP_PASS / MAILTRAP_PASSWORD |
MAILEXAM_PASSWORD |
MAIL_HOST=sandbox.smtp.mailtrap.io |
MAIL_HOST=${MAILEXAM_LOGIN}.mailexam.cn |
GitLab CI 示例:
variables:
MAIL_HOST: "${MAILEXAM_LOGIN}.mailexam.cn"
MAIL_PORT: "587"
MAIL_USERNAME: "${MAILEXAM_LOGIN}"
MAIL_PASSWORD: "${MAILEXAM_PASSWORD}"
MAIL_ENCRYPTION: "tls"
将 MAILEXAM_LOGIN 和 MAILEXAM_PASSWORD 添加到项目的 CI/CD Variables。
步骤 4. 迁移基于 API 的测试(如已使用)¶
Mailtrap Sandbox API 可编程获取邮件并断言内容。Mailexam 通过 REST API 支持相同流程:
| 任务 | Mailtrap | Mailexam |
|---|---|---|
| 邮件列表 | Sandbox API | GET /api/v1/email |
| 单封邮件 | Sandbox API | GET /api/v1/email/{uuid} |
| 附件 | Sandbox API | GET /api/v1/email/{uuid}/attachment |
| 管理 sandbox | Sandboxes API | GET /api/v1/project |
典型 CI 流程:
- 通过 SMTP 发送邮件(使用新凭据)。
- 等待投递(1–5 秒)。
- 调用
GET /email,按主题或收件人筛选。 - 在 API 响应中断言正文、标头或附件。
使用 Mailexam 控制台中的令牌授权 API 请求(见 API 文档)。
步骤 5. 验证投递¶
- 清除应用配置缓存(如适用):
php artisan config:clear、重启容器等。 - 从应用或控制台发送测试邮件。
- 打开控制台 → 您的项目 → 收件箱。邮件应在数秒内出现。
常见问题¶
邮件未出现在收件箱
- 确认
MAIL_HOST为{login}.mailexam.cn,而非smtp.mailexam.cn或sandbox.smtp.mailtrap.io。 MAIL_USERNAME必须与.mailexam.cn前的主机前缀一致。- 确保已启用 SMTP 认证,且密码复制时无多余空格。
连接错误 / 超时
- 尝试端口 587 或 2525 替代 25。
- 检查防火墙是否封锁出站 SMTP(企业网络和 CI 运行器上常见)。
CI 仍使用旧密钥
- 仅重命名变量不够 — 值必须来自 Mailexam,而非 Mailtrap。
- 更新密钥后重新运行流水线。
需要多个隔离收件箱
- Mailtrap 使用独立 sandbox。Mailexam 使用独立项目或项目内邮箱(见 API
/inbox)。
补充说明¶
- Mailtrap 的邮件历史不会迁移 — Mailexam 为新 sandbox。旧邮件保留在 Mailtrap 账户中。
- 应用代码无需修改 — 仅 SMTP 配置及可选的 API 测试。
- Mailexam 不使用 Cookie 进行站内跟踪 — 见我们为什么不使用 Cookie。
常见问题¶
能否并行使用两个服务?
可以。为 staging/CI 创建独立 Mailexam 项目,过渡期内保留 Mailtrap — 通过更改 .env 切换。
是否需要 DNS 或 SPF 更改? 不需要。两个服务均通过 SMTP 将邮件接收至测试收件箱;发件域设置不影响 sandbox 投递。
是否有配额限制? 取决于 Mailexam 套餐。开发与 CI 通常可使用免费或入门套餐 — 详见 mailexam.cn。
需要特定技术栈的迁移帮助?请联系 support@mailexam.cn。