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

PHP发送HTML格式邮件时$message内的回车换行不生效如何解决

PHP发邮件时换行失效的解决办法

问题核心原因

你在headers中指定了邮件格式为Content-Type: text/html; charset=UTF-8,也就是HTML类型邮件:

在HTML规范中,普通文本里的回车换行符不会被渲染为可见换行,只有<br>标签、<p>等块级元素的间距才会产生换行效果,这就是你设置的换行失效的直接原因。

两种可行的修复方案

方案1:保留HTML邮件格式,修改内容的换行写法

将$message里的所有手动换行替换为HTML的<br>换行标签即可,修改后的代码示例:

$message = "Dear ".$row['user']."<br>
The report you ran (".$row['report_name'].") has finished <br>
Thanks<br>
Matchmaker.";

$subject = "Report has finished successfully";

$headers = "From: test@test.com\r\n";
$headers .= "Reply-To: test@test.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

// 注意此处$row['login']要加单引号,避免PHP将login识别为常量抛出警告
mail($row['login'], $subject, $message, $headers);

方案2:改为纯文本邮件格式,保留原换行写法

如果你不需要HTML格式的富文本内容,可以直接修改headers里的Content-Type为纯文本类型,原有的回车换行就会自动生效:

// 仅需要修改headers中的这一行即可
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";

额外注意事项

  • 邮件相关的换行官方标准为\r\n(Windows风格换行),不要单独使用\n,避免部分兼容性较差的邮件客户端解析异常
  • 数组键名如果是字符串必须加引号,$row[login]建议改为$row['login'],否则PHP会先尝试将login识别为常量,未定义时才会当做字符串处理,会产生不必要的运行时警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:45:03