PHPMailer发送重置密码邮件至Outlook时链接出现多余=符号问题求助
解决PHPMailer发送邮件时Outlook中URL出现多余=符号的问题
我之前也踩过一模一样的坑!这种情况几乎都是quoted-printable编码的软换行搞的鬼——当邮件内容默认用quoted-printable编码时,PHPMailer会自动把超过指定长度的文本拆分成多行,每行末尾加=作为软换行标记。Gmail会自动处理掉这个标记,但Outlook有时候会“不识趣”地把它留在URL里,导致链接失效。
给你几个亲测有效的解决方案:
1. 切换邮件编码为Base64
直接绕过quoted-printable的换行问题,把邮件内容用Base64编码发送。在PHPMailer的配置里加一行:
$mail->Encoding = 'base64';
Base64编码会把整个邮件内容转成一串连续的字符,不会有任何换行插入,Outlook解析起来也不会出错。
2. 调整WordWrap长度,避免URL被拆分
PHPMailer默认的WordWrap值是78,当你的URL长度超过这个值时,就会被拆断插入=。你可以把这个值设得足够大(比如超过你最长的URL长度),或者直接禁用自动换行:
// 禁用自动换行,适合URL较长的场景 $mail->WordWrap = 0; // 或者设一个足够大的数值,比如200 // $mail->WordWrap = 200;
这样URL就会保持完整,不会被拆分出多余的=符号。
3. 确保HTML邮件的正确配置
如果你发送的是HTML格式的邮件,一定要确认已经开启了HTML模式:
$mail->isHTML(true);
并且把链接用标准的HTML <a> 标签包裹,比如:
<a href="http://support.domain.com/login/resetpw/a3ad3e46c045d98dba19a94dc8a9e4329dcab251/7">重置密码</a>
避免直接在文本里写长URL,HTML标签能帮邮件客户端更好地识别完整链接。
最后记得测试一下,发送到Outlook邮箱里检查链接是否正常——我当时用第一种方案就直接解决问题了,你可以先试试这个!
内容的提问来源于stack exchange,提问作者ihcc aman
相关产品推荐
相关产品推荐

