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

PHP中如何阻止附件文件名自动添加3d前缀,保留Report.pdf

解决PHP邮件附件文件名被修改的问题

问题描述

在使用PHP拼接邮件PDF附件时,代码中设置的附件文件名为Report.pdf,但实际收到的附件文件名却变成了3dReport.pdf,需要修改代码以保留原文件名。

解决方案

修改代码中的邮件头格式,确保符合MIME协议规范,具体修改如下:

// Attach the PDF
$message .= "--$boundary\r\n" 
           . "Content-Type: application/pdf; name=\"Report.pdf\"\r\n" 
           . "Content-Disposition: attachment; filename=\"Report.pdf\"\r\n" 
           . "Content-Transfer-Encoding: base64\r\n\r\n" 
           . base64_encode($output) . "\r\n";

修改说明

  • 给文件名添加双引号:将filename=Report.pdf改为filename="Report.pdf",同时在Content-Type中补充name="Report.pdf"属性。双引号可以避免邮件客户端解析文件名时出现歧义,防止文件名被意外篡改或拼接其他内容。
  • 使用标准换行符:将代码中的换行符\n替换为\r\n(CRLF),这是MIME协议要求的标准换行格式,避免因换行符不规范导致邮件头解析错误,进而影响文件名的识别。
  • 规范头信息结构:确保Content-Type、Content-Disposition等头信息之间用标准换行符分隔,且在编码内容前保留一个空行(\r\n\r\n),保证邮件结构符合规范。

另外,还需检查$boundary是否为唯一且无特殊字符的字符串,避免边界字符串与文件名内容冲突,导致解析异常。

内容的提问来源于stack exchange,提问作者Hanzala Bin Omar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:25:55