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

Laravel发送邮件触发fwrite()错误,附.env配置求排查

排查Laravel SMTP邮件错误:fwrite(): send of 18 bytes failed with errno=10054

这个errno=10054错误本质是TCP连接被远程SMTP服务器强制关闭,结合你的.env配置(使用Mailtrap的SMTP服务),我整理了几个按优先级排序的排查方向:

1. 优先验证Mailtrap凭证有效性

Mailtrap的测试SMTP凭证和具体收件箱绑定,很容易出现以下问题:

  • 你切换了Mailtrap里的测试收件箱,但.env里的MAIL_USERNAME和MAIL_PASSWORD还是旧收件箱的信息
  • 测试凭证出现异常(虽然Mailtrap测试凭证一般不会过期,但偶尔会有特殊情况)

解决方法:登录你的Mailtrap后台,找到当前使用的测试收件箱,复制它的SMTP配置信息,和.env里的内容逐行对比,确保完全一致。

2. 检查SMTP端口与加密方式的匹配性

你当前用的PORT=2525 + ENCRYPTION=tls组合本身是Mailtrap支持的,但部分网络环境可能会屏蔽2525端口。可以尝试切换到其他Mailtrap支持的端口组合:

  • 端口465 + 加密方式ssl
  • 端口587 + 加密方式tls

修改.env后,务必运行以下命令清除Laravel配置缓存,确保新配置生效:

php artisan config:clear
php artisan cache:clear

3. 排查网络连接层面的问题

这个错误大概率和网络限制有关,比如:

  • 服务器/本地机器的防火墙、安全组阻止了出站连接到smtp.mailtrap.io的对应端口
  • 代理、VPN或者ISP限制了SMTP流量

测试方法:在你的服务器或本地终端运行telnet命令测试连接:

telnet smtp.mailtrap.io 2525

如果连接失败(提示无法打开连接),你需要:

  • 检查服务器防火墙规则,开放对应端口的出站权限
  • 联系主机提供商确认是否有SMTP端口限制

4. 修复.env里的格式错误

注意你.env里的MAIL_FROM_NAME用了HTML实体",这在.env文件里是无效的,应该改成标准的双引号:

MAIL_FROM_NAME="${APP_NAME}"

或者直接写死名称:

MAIL_FROM_NAME="Your App Name"

5. 排除Laravel框架层面的问题

如果上面的步骤都没解决,可以写一个简单的独立PHP脚本(用PHPMailer)测试SMTP连接,排除Laravel框架的问题:

<?php
require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host       = 'smtp.mailtrap.io';
    $mail->SMTPAuth   = true;
    $mail->Username   = '4fe075e8cb5300';
    $mail->Password   = '5800191ac8e718';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 2525;

    $mail->setFrom('hello@example.com', 'Your App');
    $mail->addAddress('your-test-email@example.com');

    $mail->isHTML(true);
    $mail->Subject = 'SMTP Connection Test';
    $mail->Body    = 'This is a test to verify SMTP connectivity';

    $mail->send();
    echo 'Test email sent successfully!';
} catch (Exception $e) {
    echo "Error: {$mail->ErrorInfo}";
}

如果这个脚本也报错,那问题肯定出在SMTP服务器或网络上;如果脚本能成功发送,那你需要重新检查Laravel的邮件配置,比如是否有自定义的邮件服务提供者覆盖了默认配置。

6. 确认Mailtrap服务状态

偶尔Mailtrap的SMTP服务会出现临时故障,你可以查看Mailtrap后台的状态通知,确认服务是否正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:57:46