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

Laravel发送邮件遇RFC 2822地址合规错误,刷新重提交却正常

问题解决:Laravel 5.5 发送邮件偶发RFC 2822地址错误

问题现象

点击HTML表单按钮触发邮件发送时,频繁出现错误:Address in mailbox given [] does not comply with RFC 2822, 3.6.2,但刷新重提交表单后邮件可正常发送,约40次尝试中有1次能直接成功。已尝试用trim()处理邮箱、将邮箱放入数组传入to(),均无效。

核心原因排查

报错提示邮箱地址为空,大概率是发件人地址(from)未正确获取。你代码中使用env("MAIL_FROM_ADDRESS")获取发件人地址,Laravel在生产环境会缓存配置文件,导致env()函数无法实时读取到正确值,偶尔出现空值情况。

解决方案

1. 替换env()为config()读取配置

Laravel推荐通过配置文件读取邮件发件人信息,而非直接调用env():

// 原代码
$message->from(env("MAIL_FROM_ADDRESS"), 'Some name');

// 修改为
$message->from(config('mail.from.address'), config('mail.from.name'));

确保config/mail.php中已正确配置:

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'your-email@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Your Name'),
],

2. 清除Laravel配置缓存

如果服务器开启了配置缓存,执行以下命令清除缓存:

php artisan config:clear
php artisan config:cache # 重新生成缓存(生产环境建议开启)

3. 临时硬编码发件人地址测试

若不确定是配置问题,可临时硬编码发件人地址验证:

$message->from('your-valid-email@example.com', 'Some name');

若此操作后不再报错,即可确认是配置读取的问题。

4. 防止表单重复提交

按钮多次点击可能导致请求异常,给表单添加防重复提交处理:

  • 确保表单中包含Laravel的CSRF令牌(默认已存在可忽略):
<input type="hidden" name="_token" value="{{ csrf_token() }}">
  • 按钮点击后禁用:
document.querySelector('form button').addEventListener('click', function(e) {
    this.disabled = true;
    this.form.submit();
});

调试建议

在Mail::send()前添加调试代码,确认发件人地址是否为空:

dd(env("MAIL_FROM_ADDRESS"), config('mail.from.address'));

若输出中env()返回空、config()有值,即可确定是缓存导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:01:02