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
相关产品推荐
相关产品推荐

