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

使用PHP mail_runner从服务器文件夹发送附件的问题排查

解决runner_mail添加附件的错误问题

错误原因分析

  1. attachments参数格式错误:runner_mail的attachments参数要求是包含单个/多个附件数组的外层数组,你直接传入单个附件的关联数组,导致程序无法正确解析结构,触发类型错误。
  2. 变量解析错误:getabspath('$file_path')用单引号包裹变量,导致$file_path被当作字符串字面量而非变量值,无法获取正确的文件绝对路径。
  3. MIME类型错误:JPG文件的正确MIME类型是image/jpeg,使用application/octet-stream可能导致邮件客户端无法正确识别文件格式,出现附件无法打开的问题。

修正后的代码

$from = "myemail@test.com";
$to = "myclient@test.com";
$msg = "Test Documents Attached.";
$subject="Documents";

// 确保$file_path是生成证书时的正确相对路径
$filenamedate = date('Ymdhi');
$file = $filenamedate . " " . $name . " (" . $CourseDescription . ")";
$file_path = "Certificates/" . $file . ".jpg";

// 构造附件数组:外层为数组,每个元素是单个附件的配置
$attachments = array(
    array(
        'path' => getabspath($file_path), // 直接传变量,无需单引号包裹
        'name' => 'testcertificate.jpg',
        'encoding' => 'base64',
        'type' => 'image/jpeg' // 修正为JPG对应的MIME类型
    )
);

$ret = runner_mail(array(
    'from' => $from, 
    'to' => $to, 
    'subject' => $subject, 
    'body' => $msg, 
    'attachments' => $attachments
));

额外注意事项

  • 可通过var_dump(getabspath($file_path))输出路径,验证是否指向实际存在的证书文件。
  • 确保Certificates文件夹有可读权限(推荐设置为755),保证runner_mail能读取该文件。
  • 如需添加多个附件,只需在$attachments的外层数组中新增更多附件配置数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:25:29