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

Drupal 9升级PHP 8后邮件附件无法发送问题求助

Drupal 9 + PHP 8 升级后带附件邮件发送失败的解决办法

错误核心分析

报错PHPMailer\PHPMailer\Exception: Could not access file:说明PHPMailer无法读取指定的附件文件,结合Drupal 9和PHP 8的特性变化,主要排查以下几个方向:

1. 文件权限与归属问题

  • PHP 8对文件系统权限的校验更严格,确认web服务器运行用户(如www-data、apache)拥有附件文件及所在目录的读取权限
  • 执行以下命令修复常见目录权限:
    # 设置临时文件目录权限
    chmod 755 sites/default/files/tmp
    chown www-data:www-data sites/default/files/tmp
    # 设置附件存储目录权限
    chmod 755 sites/default/files/attachments
    chown www-data:www-data sites/default/files/attachments
    
  • 单个附件文件权限建议设置为644,确保web用户能读取

2. 附件路径传递错误

错误信息中Could not access file:后为空,说明传递给addAttachment()的路径是空值,需检查业务代码:

  • 确认Drupal 9中文件路径的获取方式正确,推荐使用:
    // 获取文件实体的本地真实路径
    $file = \Drupal\file\Entity\File::load($fid);
    $real_path = \Drupal::service('file_system')->realpath($file->getFileUri());
    // 将正确路径传入邮件附件方法
    $mailManager->mail(..., ['attachment_path' => $real_path], ...);
    
  • 排查自定义模块或主题中硬编码的文件路径,升级后可能因目录结构变化导致路径失效

3. PHPMailer版本兼容性

  • 若项目中使用了第三方模块替换默认PHPMailer,执行命令更新至适配PHP 8的稳定版本:
    composer update phpmailer/phpmailer --with-all-dependencies
    
  • 确保更新后的版本与Drupal 9核心版本兼容,避免版本冲突

4. PHP open_basedir 限制

  • 检查php.ini中的open_basedir配置,确认附件所在目录(含临时文件目录)被包含在允许的路径列表中
  • 若需调整,修改php.ini后重启web服务器生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:15:42