使用PHPMailer发送HTML邮件时如何添加Header解决邮件破损问题
问题排查与修改方案
1 修复现有代码明显错误
你现有代码中mail->SMTPSecure = EMAIL_SMTP_ENCRYPTION;一行缺少变量前缀$,会导致加密配置不生效,部分邮件服务商对未加密传输的内容会做截断、转码处理,可能引发内容破损。
修正为:
$mail->SMTPSecure = EMAIL_SMTP_ENCRYPTION;
2 需补充的配置与Header
你已经开启了HTML邮件模式,针对带图片、格式化内容的邮件,建议补充两类配置提升兼容性:
- 补充备选纯文本内容:设置
AltBody属性,供不支持HTML的邮件客户端降级显示,避免内容完全破损 - 添加必要自定义Header:使用PHPMailer的
addCustomHeader方法添加标准化Header,降低不同客户端的解析异常概率
3 修改参考
在你原有$mail->IsHTML(true);行之后添加对应配置即可,示例如下:
$mail->IsHTML(true); $mail->SingleTo = true; // 以下为新增内容 // 强制设置字符集为UTF-8,避免中文/特殊符号乱码 $mail->CharSet = "UTF-8"; // 补充纯文本备选内容,可根据实际业务调整内容 $mail->AltBody = "您的邮件客户端不支持HTML格式,请切换支持HTML的客户端查看内容。"; // 添加自定义Header提升兼容性 $mail->addCustomHeader('X-Mailer: PHP/' . phpversion()); $mail->addCustomHeader('Content-Transfer-Encoding: quoted-printable'); // 若你使用内嵌图片,建议不要用外部URL,改为addEmbeddedImage方法添加,示例: // $mail->addEmbeddedImage('/服务器本地图片路径.jpg', 'logo_cid', 'logo.jpg'); // 正文$body中引用图片时用 <img src="cid:logo_cid"> 即可,避免外部图片被邮箱拦截导致内容显示异常
其他检查项
- 确认$body中的所有链接为完整的绝对路径,不要使用相对路径,避免客户端无法正常跳转
- 若邮件中存在大量特殊样式,尽量使用内联CSS写法,避免外部样式被邮箱拦截导致排版错乱
内容的提问来源于stack exchange,提问作者Ratnaprabha Bhoir
相关产品推荐
相关产品推荐

