跳转至

从 Mailtrap 迁移到 Mailexam

MailtrapMailexam 解决同一问题:在开发、QA 和 CI/CD 中拦截外发邮件,避免投递给真实收件人。迁移只需更换 SMTP 参数,必要时更新测试中的 API 调用。发送代码(Mail、Nodemailer、Action Mailer 等)无需修改。

概览

Mailtrap Sandbox Mailexam
用途 测试 SMTP 收件箱 测试 SMTP 收件箱
主机 sandbox.smtp.mailtrap.io {login}.mailexam.cn
端口 252525465587 252525465587
用户名 每个 sandbox 独立 每个项目独立
密码 与 sandbox 用户名配对 与项目用户名配对
SMTP 认证 必需 必需(PLAIN)
CI/CD API 支持 支持

推荐端口

两个服务都建议使用 587 + TLS(STARTTLS)。若运营商封锁 25 端口,请使用 2525

准备工作

  1. Mailexam 账户 — 注册 只需几分钟。
  2. 具备 SMTP 凭据的项目 — 注册时自动创建;登录名、密码和主机见欢迎邮件控制台
  3. 应用配置访问权限:.env、CI/CD 变量、流水线密钥。

步骤 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_LOGINMAILEXAM_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 流程:

  1. 通过 SMTP 发送邮件(使用新凭据)。
  2. 等待投递(1–5 秒)。
  3. 调用 GET /email,按主题或收件人筛选。
  4. 在 API 响应中断言正文、标头或附件。

使用 Mailexam 控制台中的令牌授权 API 请求(见 API 文档)。

步骤 5. 验证投递

  1. 清除应用配置缓存(如适用):php artisan config:clear、重启容器等。
  2. 从应用或控制台发送测试邮件。
  3. 打开控制台 → 您的项目 → 收件箱。邮件应在数秒内出现。

常见问题

邮件未出现在收件箱

  • 确认 MAIL_HOST{login}.mailexam.cn,而非 smtp.mailexam.cnsandbox.smtp.mailtrap.io
  • MAIL_USERNAME 必须与 .mailexam.cn 前的主机前缀一致
  • 确保已启用 SMTP 认证,且密码复制时无多余空格。

连接错误 / 超时

  • 尝试端口 5872525 替代 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