PHPMailer 5.2.22版本FromName字段部分字符串丢失问题求助
解决PHPMailer 5.2.22中FromName含逗号时丢失前缀的问题
这个问题我之前帮同事排查过!你碰到的情况是因为旧版PHPMailer对包含特殊字符的发件人名称处理不规范导致的。
问题根源
邮件协议(RFC 5322)规定:如果发件人名称里包含逗号、双引号这类特殊字符,必须用双引号把整个名称包裹起来,否则邮件客户端会把逗号当成「名称和地址的分隔符」,直接截断逗号前的内容。而PHPMailer 5.2.22这个非常老旧的版本,不会自动处理这种情况,所以你设置的"CONC, abcø"被解析成了名称是CONC,后面的abcø被误判成了额外的地址片段(实际没有对应地址,就只剩这部分显示了)。
两种解决方案
1. 手动给FromName添加双引号(适配旧版本)
直接在你的名称前后包裹双引号,让邮件头符合协议规范:
<?php $email = 'waleedAhmed@mymail.com'; $name = 'waleed'; $event_info[0]['organizer_name'] = 'CONC, abcø'; $subject = 'Testing..'; $content = ' content : '. $event_info[0]['organizer_name']; $objName = new \PHPMailer(); $objName->CharSet = 'UTF-8'; // 关键修改:手动用双引号包裹名称 $objName->FromName = '"' . $event_info[0]['organizer_name'] . '"'; $objName->From = $email; // 后续的SMTP配置、添加收件人、发送逻辑 // $objName->Host = '你的SMTP服务器'; // $objName->addAddress('收件人邮箱'); // $objName->Body = $content; // $objName->send();
如果你的名称里本身包含双引号,记得要转义成\",比如"CONC\"test, abcø"。
2. 升级PHPMailer到最新版本(强烈推荐)
PHPMailer 5.2.22是2017年的版本,不仅有这个小问题,还存在安全漏洞和兼容性缺陷。升级到6.x系列的新版本后,它会自动检测名称里的特殊字符并完成引号包裹,不用你手动处理,同时还支持现代的SMTP特性和更好的编码兼容。
验证效果
修改后,邮件头里的From字段会变成:
"CONC, abcø" <waleedAhmed@mymail.com>
这样邮件客户端就能正确识别完整的发件人名称了。
内容的提问来源于stack exchange,提问作者Waleed Khan
相关产品推荐
相关产品推荐

