You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel调用Mail::send触发Swift_TransportException连接错误

解决Mail::send连接mailtrap.io被拒绝(Connection refused #111)的问题

嘿,我之前也踩过这个坑,给你几个实打实的排查方向,应该能快速解决:

  • 先核对.env邮件配置,这是最常见的问题
    确保你的.env里的邮件参数完全和mailtrap提供的一致,别写错端口或者加密方式:

    MAIL_MAILER=smtp
    MAIL_HOST=mailtrap.io
    MAIL_PORT=2525  # 划重点!mailtrap默认用2525,别写成25或465
    MAIL_USERNAME=你的mailtrap专属用户名
    MAIL_PASSWORD=你的mailtrap专属密码
    MAIL_ENCRYPTION=tls  # 这里用tls而非ssl
    MAIL_FROM_ADDRESS=test@example.com
    MAIL_FROM_NAME="${APP_NAME}"
    

    改完配置必须清缓存,不然Laravel会读旧配置:

    php artisan config:clear
    php artisan cache:clear
    
  • 排查网络/防火墙限制
    如果配置没问题,大概率是你的机器或服务器封了2525端口。用telnet测下连通性:

    telnet mailtrap.io 2525
    

    要是连不上,就得找运维开放端口,或者试试mailtrap的备用端口(比如465、587)。

  • 确认mailtrap账户状态
    偶尔免费版mailtrap账号会因为长期闲置或异常操作被临时限制,登录mailtrap后台看看你的收件箱是不是正常,有没有收到限制通知。

  • 检查config/mail.php的硬编码覆盖
    有些时候会不小心在config/mail.php里硬写了配置,覆盖了.env的值,确保smtp驱动的配置是读取env变量的:

    'smtp' => [
        'transport' => 'smtp',
        'host' => env('MAIL_HOST', 'mailtrap.io'),
        'port' => env('MAIL_PORT', 2525),
        'encryption' => env('MAIL_ENCRYPTION', 'tls'),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
        'auth_mode' => null,
    ],
    
  • 用极简代码测试排除业务逻辑问题
    写个简单的路由测试,排除是你业务代码里的邮件逻辑导致的问题:

    Route::get('/test-mail', function () {
        Mail::raw('这是测试邮件内容', function ($message) {
            $message->to('test@example.com')->subject('测试邮件');
        });
        return '邮件发送请求已提交!';
    });
    

    访问这个路由如果还是报错,就是基础配置/网络问题;如果能发,那就是你业务代码里的邮件逻辑有问题。

另外提个Docker环境的小坑:如果是在容器里跑Laravel,要确保容器用的是能访问外部的网络模式,别用封闭的网络配置。

内容的提问来源于stack exchange,提问作者Elite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:48:08