使用Mailtrap发送邮件失败:SMTP连接错误排查求助
解决Mailtrap SMTP连接报错问题
核心问题定位
报错里的“找不到套接字传输‘tsl’”是加密协议拼写错误导致的,同时配置文件存在语法问题,以下是分步解决方案:
- 修正加密协议拼写
打开项目根目录的.env文件,将:
MAIL_ENCRYPTION=tsl
修改为:
MAIL_ENCRYPTION=tls
这是触发当前报错的直接原因,PHP不存在名为tsl的传输协议,正确的是tls。
- 清除Laravel配置缓存
执行以下命令确保新配置生效:
php artisan config:clear php artisan cache:clear
- 检查PHP OpenSSL扩展
- 运行
php -m命令,查看输出中是否包含openssl; - 如果没有,打开
php.ini文件,取消注释extension=openssl(Windows环境),或者通过包管理器安装php-openssl扩展(Linux环境,如apt install php-openssl)。
- 修复config/mail.php的语法错误
你提供的config/mail.php中,stream配置被错误嵌套在failover邮件器中,导致SMTP邮件器无法读取SSL相关配置。调整smtp邮件器的配置,将stream移入其中:
'mailers' => [ 'smtp' => [ 'transport' => 'smtp', 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => null, // 新增stream配置到smtp邮件器 'stream' => [ 'ssl' => [ 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ], ], ], // 其他邮件器配置保持不变... 'failover' => [ 'transport' => 'failover', 'mailers' => [ 'smtp', 'log', ], // 移除这里的stream配置 ], ],
- 验证Mailtrap凭证
确认.env中的MAIL_USERNAME和MAIL_PASSWORD与Mailtrap控制台提供的完全一致,避免复制时出现空格或字符缺失。
内容的提问来源于stack exchange,提问作者user21330077
相关产品推荐
相关产品推荐

