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

如何让wp_mail()字符串参数正确解析Markdown与换行格式

问题根源

你当前设置邮件Content-Type为text/html,按照HTML渲染规则,普通文本中的PHP_EOL、\r\n换行符不会被解析为视觉换行,只有<br>标签、块级HTML元素才会产生换行效果,因此所有内容会被挤在同一行显示。另外你当前拼接消息字符串时,换行后添加的大量前置缩进空格也会被带入最终内容,会造成不必要的前导空白。

可行解决方案

方案1:仅需正常换行,不需要Markdown格式渲染

两种实现方式二选一即可,改动量极小:

  • 改用纯文本邮件类型:将headers中的Content-Type改为text/plain; charset=UTF-8,此时你写入的所有换行符都会被邮件客户端正常识别,按纯文本规则排版,不需要额外处理内容,适合告警、通知类不需要复杂样式的邮件。
  • 保留HTML类型自动转换换行:在调用wp_mail前用PHP内置的nl2br()函数处理$message参数,把文本里的换行符自动替换为HTML可识别的<br>标签,调整后的send_mail方法示例:
public function send_mail(string $to, string $subject, string $message): bool
{
    $headers = [
        'Content-Type: text/html; charset=UTF-8'
    ];
    // 将文本换行自动转换为HTML换行标签
    $message = nl2br($message);
    return wp_mail(
        $to,
        $subject,
        $message,
        $headers
    );
}

注意:拼接消息字符串时记得去掉换行后多余的前置缩进,避免内容出现无意义的前导空格,正确的拼接示例参考:

$this->send_mail(
    "Test@example.com",
    "Pardot Settings Error",
    "The Pardot integration has trigger a Pardot API error: " . PHP_EOL
    . "Error: " . $decode_response['code'] . " \r\n"
    . "Error Description: " . $decode_response['message']
);

方案2:需要完整支持Markdown格式内容排版

如果要让传入的Markdown语法(标题、加粗、列表、引用等)都能正常渲染显示,按以下步骤处理:

  1. 集成轻量无依赖的Markdown解析类到项目中,这类单文件解析工具不需要复杂安装,引入后即可调用,把传入的Markdown格式字符串转换为标准HTML代码。
  2. 给解析后的HTML内容套上基础的邮件HTML外壳,设置全局兼容的字体、行高样式,避免不同邮件客户端出现渲染错乱。
  3. 保留Content-Type: text/html; charset=UTF-8的请求头,把处理完成的完整HTML内容传入wp_mail即可。
    最简实现参考:
public function send_mail(string $to, string $subject, string $message): bool
{
    $headers = [
        'Content-Type: text/html; charset=UTF-8'
    ];
    // 将Markdown内容解析为HTML
    $parsedHtml = $parsedown->text($message);
    // 套基础邮件结构,兼容多数客户端渲染
    $finalMessage = '<!DOCTYPE html>
<html>
<body style="font-family: system-ui, sans-serif; line-height: 1.6; padding: 16px; max-width: 600px; margin: 0 auto;">'
        . $parsedHtml
        . '</body>
</html>';
    return wp_mail(
        $to,
        $subject,
        $finalMessage,
        $headers
    );
}

调整完成后,你传入的Markdown格式内容就会被正确解析排版,不会再出现内容挤成一行的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:51:21