Mailtrap 配置失败主因是驱动、端口、加密方式不匹配,推荐用 MAIL_MAILER=smtp、PORT=2525、ENCRYPTION=null;需禁用队列、用 Mailable 封装并内联样式、检查防火墙及 openssl 扩展。

Mailtrap 配置后发不出邮件?先检查 .env 里的驱动和端口
Mailtrap 不是“配了就通”的黑盒,Laravel 默认用 smtp 驱动,但很多人漏掉关键三要素:驱动名、端口、加密方式。Mailtrap 的沙盒 SMTP 地址是固定的,但端口有 2525(推荐)和 587 两种,587 必须配 MAIL_ENCRYPTION=tls,而 2525 可以用 MAIL_ENCRYPTION=null 或留空——填错一个,php artisan mail:send 就静默失败,连错误都不抛。
实操建议:
-
MAIL_MAILER=smtp(Laravel 9+ 用MAIL_MAILER,不是MAIL_DRIVER) MAIL_HOST=smtp.mailtrap.io-
MAIL_PORT=2525(优先选这个,兼容性好,不用纠结 TLS/SSL) MAIL_USERNAME=你的 Mailtrap inbox 用户名(一串 hex 字符)MAIL_PASSWORD=你的 Mailtrap inbox 密码(另一串 hex 字符)-
MAIL_ENCRYPTION=null(配2525时最稳)
本地 php artisan tinker 发测试邮件总卡住?关掉队列再试
很多人在 tinker 里调 Mail::to(...)->send(...),结果光标不动、没报错、也没收到邮件——八成是 Laravel 把邮件塞进了队列,而你根本没跑 php artisan queue:work。Mailtrap 本身不支持异步回调验证,它只收 SMTP 连接发来的原始数据包,队列一压,就等同于“没发”。
实操建议:
- 临时禁用队列:在
.env加QUEUE_CONNECTION=sync - 或发邮件前强制同步发送:
Mail::queue(new WelcomeMail())改成Mail::send(new WelcomeMail()) - 确认是否真在发:加一行
dd('mail sent');在Mail::send()后,看是否执行到——没走到,说明前面逻辑已中断(比如用户没查到、模板路径错)
收到的邮件里样式全乱?别用 view() 直接返回 Blade,用 Mailable 类封装
直接在控制器里写 Mail::send('emails.welcome', [...], function ($m) {...}) 看似快,但 Blade 模板里的相对路径(比如 asset('css/app.css'))、内联样式、甚至换行都会在 Mailtrap 预览里失效。Mailtrap 渲染的是纯 HTML 邮件体,不走 Laravel 的前端 pipeline,asset() 会生成 http://localhost:8000/css/app.css,而 Mailtrap 沙盒环境根本打不开这个地址。
实操建议:
- 必须用
php artisan make:mail WelcomeMail创建类,把样式内联(用@stack('styles')+@push('styles')不顶用,得用工具如laravel-mail-css-inliner或手写) - 图片用绝对 URL(比如
https://yourapp.com/img/logo.png),别用storage_path()或public_path() - 测试前先用
php artisan view:clear,避免缓存旧模板
Mailtrap 收不到邮件却显示“Connection refused”?检查防火墙和 PHP 扩展
错误信息 Connection refused 不代表 Mailtrap 挂了,大概率是本地网络拦了出站 2525 端口,或者 PHP 缺少 openssl 扩展(SMTP over TLS/SSL 必需)。Mac 上常见于开启了“防火墙”或用了某些代理软件;Windows WSL 用户则常因宿主机防火墙或 Docker 网络配置导致。
实操建议:
- 终端执行
telnet smtp.mailtrap.io 2525(Mac/Linux)或Test-NetConnection smtp.mailtrap.io -Port 2525(PowerShell),通不了就不是代码问题 - 运行
php -m | grep openssl,没输出就重装 PHP 或开扩展 - WIndows 用户若用 XAMPP/MAMP,确认它们的 PHP 是当前 CLI 使用的版本(
which php和php --ini对不上就容易踩坑)
Mailtrap 的 inbox 刷新延迟约 1–3 秒,别刚点发送就狂点刷新;另外,它的“收件箱”只存最近 7 天、最多 100 封,清空后不可恢复——这点容易被当成“没收到”。










