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

Symfony使用Gmail发邮件出现(3D =20) quoted-printable编码异常

Symfony Mailer Gmail HTML邮件编码异常解决方案

问题根因:手动重复添加Content-Type、Content-Transfer-Encoding邮件头,破坏了Symfony Mailer自动生成的合规邮件结构,导致Gmail无法正确识别内容编码,直接展示原始的quoted-printable编码串。

  • 第一步:删除手动添加邮件头的两行冗余代码
    Symfony调用Email::html()方法后会自动生成符合规范的text/html; charset=utf-8内容类型头,也会根据传输层自动适配内容传输编码,不需要手动新增重复头。
  • 第二步:如有强制指定传输编码的需求,使用Symfony原生Header操作方法修改已有头,而非新增重复头
    如需强制使用quoted-printable编码:
    // 不要用addTextHeader新增,直接修改已生成的头
    $email->getHeaders()->get('Content-Transfer-Encoding')->setBody('quoted-printable');
    
    如需强制使用base64编码:
    $email->getHeaders()->get('Content-Transfer-Encoding')->setBody('base64');
    
    注意:不要手动对$emailContent做base64/quoted-printable编码,Symfony会自动按照指定编码对原始HTML内容做符合RFC规范的编码处理,自动处理每行长度换行,不会出现内容截断问题
  • 第三步:校验传入的$emailContent编码,确保内容本身为原生UTF-8格式,未提前做多余的转义、编码处理。

修正后的完整业务代码参考:

$userEmail = $this->getUser()->getGoogleEmail();
$userGoogleAppPassword = $this->getUser()->getGoogleAppPassword();

$email = (new \Symfony\Component\Mime\Email())
    ->from($userEmail)
    ->to($clientDetails->getPrimaryEmail())
    ->subject($emailFound->getSubject())
    ->html($emailContent);

// 移除原有的两行手动加头代码,如有强制编码需求按上述方法修改已有的头即可

$transport = new GmailSmtpTransport($userEmail, $userGoogleAppPassword);

$handler = new MessageHandler($transport);

$bus = new MessageBus([
    new HandleMessageMiddleware(new HandlersLocator([
        SendEmailMessage::class => [$handler],
    ])),
]);

$mailer_new = new Mailer($transport, $bus);
$mailer_new->send($email);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:24:01