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

使用PHPWord生成邮件附件出错:附件损坏仅1KB,求正确方案

问题分析与解决方案

你的问题出在邮件附件的参数传递错误:你传给addAttachment的第二个参数是临时文件的路径,但多数邮件库的addAttachment方法第二个参数需要的是文件的内容字符串,而非文件路径。这就导致邮件附件实际存储的是路径文本,而非Word文件内容,所以附件只有1KB且损坏。

修复步骤

  1. 读取生成好的Word临时文件内容
  2. 将文件内容作为参数传入addAttachment

修改后的代码:

$fileName = 'file.docx';
$fileAttachment = tempnam(sys_get_temp_dir(), 'PHPWord');
$template->saveAs($fileAttachment);
// 读取文件内容
$fileContent = file_get_contents($fileAttachment);
// 删除临时文件(可选,避免临时文件堆积)
unlink($fileAttachment);
// 使用更精确的Word文档MIME类型
$contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";

$notification
    ->setTemplate("template", $templateParams)
    ->setSubject($this->_('Email subject'))
    ->addRecipient("to", $email, $email)
    ->addAttachment($fileName, $fileContent, $contentType);

额外优化点

  • 替换通用的application/octet-stream为Word文档专属的MIME类型,邮件客户端能更准确识别文件类型
  • 生成附件后删除临时文件,避免服务器临时目录堆积无用文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:50:26