Laravel邮件动态变量附加PDF附件失败问题求助
问题分析与解决方案
首先看你的代码,闭包内没有引入$result变量,这是导致动态路径失效的核心原因:
你的Mail::send闭包仅use ($email),但在attach方法里调用了$result->getDocumentNumber(),此时闭包内无法访问外部的$result变量,拼接出来的路径实际是不完整的(相当于szamlazzhu/pdf/.pdf),自然找不到对应文件。
修正代码
把$result也加入闭包的use列表即可:
Mail::send('emails.nygta', ['number' => $result->getDocumentNumber(), 'link' => 'https://'.$_SERVER['HTTP_HOST'].'/pdf/'.$result->getDocumentNumber().'.pdf'], function($m) use ($email, $result) { $m->from('support@task.net', 'task.net'); $m->to($email, $email)->subject(trans('welcome.nygtsubject')); $m->attach(base_path('szamlazzhu/pdf/'.$result->getDocumentNumber().'.pdf'), ['as' => 'NYUGTA.pdf', 'mime' => 'application/pdf']); });
额外排查点(若修正后仍有问题)
- 打印拼接后的完整路径,手动核对是否与文件实际路径一致:
$filePath = base_path('szamlazzhu/pdf/'.$result->getDocumentNumber().'.pdf'); dd($filePath); - 检查文件权限:确保Laravel进程拥有读取该PDF文件的权限(Linux环境可执行
chmod 644 目标文件名调整) - 建议用Laravel自带的
url()辅助函数生成链接,替代$_SERVER['HTTP_HOST']:'link' => url('/pdf/'.$result->getDocumentNumber().'.pdf')
内容的提问来源于stack exchange,提问作者Morph
相关产品推荐
相关产品推荐

