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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:05:21