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

PHPMailer发送含@media媒体查询的HTML邮件时代码被移除如何解决?

解决方案

1. 优先处理Tiny编辑器的过滤规则

Tiny默认会拦截@media等非行内样式代码,先修改编辑器初始化配置,放开样式过滤:

tinymce.init({
  // 保留你原有配置,新增以下内容
  extended_valid_elements: 'style[media|type]',
  valid_children: '+head[style],+html[head]',
  verify_html: false
});

配置修改后重新编辑邮件正文,存入数据库前先打印输出$mail_body,确认媒体查询代码已经完整写入数据库。

2. 排除内容读取转义问题

从数据库读取邮件正文后,先打印$row['description'],确认媒体查询代码正常读出,没有被PHP默认转义或者数据库转义吃掉,如有转义则用htmlspecialchars_decode()处理:

$mail_body = htmlspecialchars_decode($row['description']);

3. 修正PHPMailer配置

PHPMailer 5.2本身不会主动过滤HTML内容,你当前的配置只需要调整赋值顺序即可:把$mail->IsHTML(true)放在$mail->Body赋值前面,避免内容被当成纯文本处理:

$mail->IsHTML(true); // 先声明是HTML内容
$mail->Body = $msg; // 再赋值正文

4. 兼容备选方案

如果仍有客户端过滤媒体查询,改用邮件通用适配方案:

  • 所有核心样式全部写在行内,这是所有邮件客户端兼容性最好的写法
  • 容器宽度用width:100%;max-width:600px的写法,不需要媒体查询即可实现基础自适应
  • 隐藏内容用mso-hide:all等邮件专属兼容属性实现,避免依赖媒体查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:54:04