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

PHPMailer无法正确处理多部分邮件 求助解决方案

PHPMailer发送多部分邮件变为纯文本显示的问题

我用PHPMailer给群组发邮件多年,之前一直正常,但上周开始,发送的多部分邮件全部以纯文本形式显示。更新到最新版PHPMailer后问题依然存在,所有邮件客户端(Gmail、Outlook、Yahoo Mail)都出现这个情况。

我的PHP脚本

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require '/fullpath/public_html/tmp/PHPmailer.php';
require '/fullpath/public_html/tmp/SMTP.php';
require '/fullpath/public_html/tmp/Exception.php';

$body  = $_POST['msgText'];

$mail  = new PHPMailer();

$mail->setFrom('MY WEB SITE EMAIL', 'ME');
$mail->addReplyTo('MY EMAIL', 'ME');
$mail->addAddress('MY EMAIL', 'ME');
$mail->Subject = $_POST['subjectText'];
$mail->isHTML(true);
$mail->SMTPDebug = 2;
$mail->Body = $body;
$mail->CharSet = 'UTF-8';

$a = $_POST['toText'];
// For output display
echo "<!DOCTYPE html>\n<html lang=en><head><title>My Test PHP Mailer</title></head>\n<body>\n<h1>My Test PHP Mailer</h1>\n<h4>Sending Emails to:</h4>\n<ul>";
foreach ($mail->parseAddresses($a) as $address) {
    $mail->addBCC($address['address'], $address['name']); // for release
//    $mail->addAddress($address['address'], $address['name']); // for testing
    echo "<li>Name: " . $address['name'] . " - address: [" . $address['address'] . "]</li>\n";
}
echo "</ul>\n";

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
  echo "<br>" . $_POST['toText'];
} else {
 echo "<form><textarea name=ta>" . $body . "'></textarea></form>";
}
echo "<p><a href='index.php'>Back to index.php</a></p>\n</body>\n</html>";
?>

收到的邮件显示内容

This is a multi-part message in MIME format.
--b1_5S1Pr6ILOHSPuOiGgJGQzPfIPsBjnsOmX6MAuoro
Content-Type: text/plain; charset=us-ascii

Good luck to all, and thanks for participating,

--b1_5S1Pr6ILOHSPuOiGgJGQzPfIPsBjnsOmX6MAuoro
Content-Type: text/html; charset=us-ascii

<HTML><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></HEAD>
<BODY bgColor="#ffffff">
<div style="max-width:800px;border:1px solid #666666; padding:9px; background-color:white;">
<DIV><FONT face="Arial" color="#000080" size="6"><B><I>NFL
<FONT color="#C80000">Challenge</FONT> 2022</I></B></FONT></DIV>
<DIV><FONT face="Arial, Helvetica" color="#ff0000" size="4"><B>Hey Sportsfans,</B></FONT></DIV>
<br>
<DIV><FONT face="Arial" size="2">Good luck to all, and thanks for participating,</FONT></DIV>
<br>
</DIV></div>
</BODY>
</HTML>


--b1_5S1Pr6ILOHSPuOiGgJGQzPfIPsBjnsOmX6MAuoro--

补充信息

  • 使用PHPMailer 6.1.1版本
  • 测试过Gmail、Outlook、Yahoo Mail客户端
  • 附上正常与异常邮件的原始源代码:

正常邮件原始内容

Subject: NFL Challenge 2022 - Week 18 Reminder
X-PHP-Script: xxxxxxxxxxxx/file.php for 162.252.247.224
X-PHP-Originating-Script: 1002:PHPmailer.php
Date: Fri, 6 Jan 2023 01:02:03 +0000
From: NFL Challenge <me@myserver>
Message-ID: <GdssaiyhOGwE5lgWdOnRMleJbhKIfeZQPc4TpJB74@www.starbase47.com>
X-Mailer: PHPMailer 6.1.1 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="b1_GdssaiyhOGwE5lgWdOnRMleJbhKIfeZQPc4TpJB74"
Content-Transfer-Encoding: 8bit
X-CMAE-Envelope: MS4xfNLwjf/lI+ECbHq2uNTaPo2pDBlT0LgWHZfm+1mtCGh1qLdFoViGjgSHemmT9C8buRCOrt1A4pAvnGulYNkPiO6cJBSDRVv2s9yqB3tUM/GOH02Idbpt 4uA8x2WkhDDGrE1gBk+cE3ZeAWqXwfQWDQznYq5N7InVD9s4UlutNmMlACjSidhnEIrzVJHFZsR3gvGOSiEZDf8Xg4jjk51comuqnF4hLvF9slMWKexfPYfp 6Xxsb7BqWoHfbmSTB0WrMR6wzG3e0ybFGe3HDiMIPPCsHfCHUzaLjXMSfUCI8xcbnScfTz9t/00yLtSwLj4nu+sganzgBI433vpvFj28Aw7bDlm4K0iERspz shEaDRpZwHKD44xwCTSsa/zjvrXAdsOo39EuWLtn25QSOT3QYuEKmpe4M1mMGS6BH/oP3rxUGu89rDzc7fBcav7MtnNLI7Wz2kWAnBvuyrZWhKM/vBzLUUd/ uWtz/nhTNzzItSy1rm8ObR+cm6RuWil0uilXF9nF/gg5TzFOixzNgTuvexbclXCl198ACnro7gQfxMM47NeRuZkhQUjjOuhm+k0TeJyRKWD7S1ujA3qfndH/ 8LI=

--b1_GdssaiyhOGwE5lgWdOnRMleJbhKIfeZQPc4TpJB74
Content-Type: text/plain; charset=us-ascii

NFL
Challenge 2022
Hey Sportsfans, ...

异常邮件原始内容

Subject: NFL Challenge 2022 - Playoffs Test
X-PHP-Script: www.starbase47.com/mytest_mail.php for 162.252.247.224 X-PHP-Originating-Script: 1002:PHPmailer.php
Date: Thu, 12 Jan 2023 21:33:09 +0000 From: NFL Challenge <me@myserver> Message-ID: <5S1Pr6ILOHSPuOiGgJGQzPfIPsBjnsOmX6MAuoro@www.starbase47.com> X-Mailer: PHPMailer 6.1.1 (https://github.com/PHPMailer/PHPMailer) MIME-Version: 1.0 Content-Type: multipart/alternative;
  boundary="b1_5S1Pr6ILOHSPuOiGgJGQzPfIPsBjnsOmX6MAuoro" Content-Transfer-Encoding: 8bit
Message-Id: <E1pG5C9-0006pY-1D@192.222.167.72.host.secureserver.net>
From: me@myserver
X-CMAE-Envelope: MS4xfI/De/t+kmwbb6eY2xWVi89UxsAiJ5qMwBEnzqpJBSwnrpHKLYrLpRjMnFUNxqZVwAckeapMXSEzXsK71DSiMO5WP0VZxM0iNr0qMiD/lOxS2Sp5+Vb0 4nUe/KgwmKZcA8v6BUI5N0fFqt5Ha2nrzlg4ouBiPrZTTYgrTQ+UQoHWyWWl/LWrhDX5AUYdRYL/DI0Q7u5H+LjjhdKhAOdTeKAPsa+EEkVMxWbX/z27TF2m jzATQVQbCe7u4en0+gEgDg==

This is a multi-part message in MIME format.
--b1_5S1Pr6ILOHSPuOiGgJGQzPfIPsBjnsOmX6MAuoro
Content-Type: text/plain; charset=us-ascii

NFL
Challenge 2022
Hey Sportsfans, ...

修复方案

对比正常和异常邮件的原始内容,能发现几个核心问题:

  1. 邮件头格式损坏:异常邮件的多个头字段(Date、From、Message-ID等)未正确换行,挤在同一行,导致客户端无法解析MIME结构。
  2. 重复头字段:异常邮件出现了两次Message-ID和From字段,是服务器中间代理改写邮件头导致的。
  3. Content-Type头格式错误:该字段被拆分为两行,边界值前的缩进不符合MIME规范,客户端无法识别正确的分隔边界。

针对这些问题,执行以下修复步骤:

  • 强制使用SMTP发送:当前代码默认用PHP的mail()函数发送,易被服务器邮件程序修改格式。添加SMTP配置,直接通过SMTP服务器发送:
    $mail->isSMTP();
    $mail->Host = 'your-smtp-host.com'; // 填写你的SMTP主机地址
    $mail->SMTPAuth = true;
    $mail->Username = 'your-email@myserver.com';
    $mail->Password = 'your-email-password';
    $mail->SMTPSecure = 'tls'; // 或ssl,根据服务器配置选择
    $mail->Port = 587; // tls对应587,ssl对应465
    
  • 手动设置AltBody:虽然isHTML(true)会自动生成纯文本版本,但手动设置可避免自动生成的潜在问题,确保双版本内容正确:
    $mail->AltBody = strip_tags($body); // 从HTML内容中提取纯文本
    
  • 联系主机提供商:确认近期是否修改了邮件服务器配置(如添加过滤、改写头信息的服务),导致邮件格式被破坏。
  • 确保PHPMailer为最新稳定版:重新从官方渠道获取最新版本,排除版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:15:50