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

Laravel中能否提取邮件纯文本并保留原格式?

Laravel提取邮件纯文本并保留格式的方法

Laravel本身提供了更可靠的方式获取带格式的邮件纯文本内容,无需手动处理HTML标签:

方法1:利用SwiftMailer的HTML转纯文本工具

SwiftMailer(Laravel底层邮件组件)自带HTML到纯文本的转换器,能自动保留段落、换行等结构:

use Swift_Plugins_ConvertHtmlToPlainTextPlugin;
use Swift_Message;

// 假设你已有邮件HTML内容$body_html
$message = new Swift_Message();
$message->setBody($body_html, 'text/html');

// 转换为带格式的纯文本
$converter = new Swift_Plugins_ConvertHtmlToPlainTextPlugin();
$plainText = $converter->convert($message);

方法2:在邮件类中定义纯文本视图

如果你是自定义邮件类,可以直接在build()方法中同时指定HTML视图和纯文本视图,精准控制纯文本格式:

public function build()
{
    return $this->view('emails.order-confirmation') // HTML视图
                ->text('emails.order-confirmation-text'); // 对应纯文本视图
}

修复你的现有代码

你之前的代码把所有换行、制表符都替换为空,导致内容聚合。如果要手动处理,需先将HTML块级标签转换为文本换行,再清理多余格式:

// 先将HTML段落、换行标签转换为文本换行
$body_text = str_replace(['<p>', '</p>', '<br>', '<br/>', '<div>', '</div>'], "\n", $body_html);
// 移除所有HTML标签
$body_text = strip_tags($body_text);
// 解码HTML实体
$body_text = html_entity_decode($body_text);
// 合并多余空格但保留换行
$body_text = preg_replace('/\s+/', ' ', $body_text);
// 清理首尾空白
$body_text = trim($body_text);

优先推荐方法1或2,因为它们能更准确地处理复杂HTML结构,避免手动替换标签的遗漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:46:10