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

Laravel邮件附件本地正常生产环境缺失问题求助

解决Laravel部署到Ubuntu后邮件无附件问题

首先看代码里的致命小问题:
你写的判断条件里,数组键名多了个空格:$this->email['attachmentUrl '](注意attachmentUrl后面的空格),这会导致判断永远为false,根本不会执行附件添加逻辑!本地测试时可能没注意到这个空格,或者数据里的键名不带空格,直接把空格删掉改成$this->email['attachmentUrl'],这大概率能解决问题。

如果还不行,按以下步骤排查:

1. 确认是否进入附件逻辑

在if块前后添加日志,验证代码是否走到了附件处理部分:

Log::info('准备检查邮件附件,当前attachmentUrl值:'.($this->email['attachmentUrl'] ?? '空'));
if(!empty($this->email['attachmentUrl'])) {
    Log::info('开始处理附件,文件路径:'.$file);
    // ... 剩余代码
    Log::info('附件已添加,文件名:'.$filename);
} else {
    Log::info('attachmentUrl为空,跳过附件');
}

然后查看Laravel日志(storage/logs/laravel.log),确认是否进入了if块。

2. 替换附件添加方式

用Laravel自带的attach方法代替attachData,直接传入文件路径,避免手动读取文件可能出现的问题:

// 替换原来的attachData代码
$message->attach($file, [
    'as' => $filename,
    'mime' => $mimeType
]);

甚至可以省略mime参数,Laravel会自动检测文件的MIME类型:

$message->attach($file, ['as' => $filename]);

3. 检查文件读取权限

虽然你设置了chmod -R 775 storage,但要确认PHP执行用户(通常是www-data)是否属于storage目录的用户组。可以执行以下命令:

# 查看storage目录的用户和组
ls -ld /var/www/html/storage
# 查看www-data所属组
groups www-data

如果storage的组不是www-data所属的组,执行:

chown -R www-data:www-data /var/www/html/storage

4. 捕获文件读取异常

手动读取文件时可能有隐藏错误,添加异常捕获:

try {
    $fileContent = file_get_contents($file);
    Log::info('文件读取成功,大小:'.strlen($fileContent).'字节');
    $message->attachData($fileContent, $filename, ['mime' => $mimeType]);
} catch (\Exception $e) {
    Log::error('读取附件文件失败:'.$e->getMessage().',文件路径:'.$file);
}

查看日志里的错误信息,定位具体问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:41