0

0

在 Laravel 中发送 HTML 邮件并确保换行符正确显示

碧海醫心

碧海醫心

发布时间:2025-11-07 11:31:01

|

483人浏览过

|

来源于php中文网

原创

在 Laravel 中发送 HTML 邮件并确保换行符正确显示

本教程详细阐述了在 laravel 应用程序中发送包含 html 格式内容(如换行符 `
`)的电子邮件时,如何确保邮件客户端正确解析。核心在于通过 laravel 的 mailable 类或直接设置邮件头,明确指定 `content-type: text/html`,从而避免内容被错误解析为纯文本或被截断的问题。

理解邮件内容类型与换行符问题

在构建电子邮件内容时,开发者常常希望通过 HTML 标签(例如
)来实现文本的格式化和换行。然而,如果电子邮件客户端将邮件内容识别为纯文本(text/plain),那么所有 HTML 标签,包括
,都将被视为普通字符串而直接显示出来,或者被邮件客户端忽略,导致内容显示混乱甚至被截断。

例如,以下 PHP 代码片段中直接拼接 HTML 标签:

$mes2 = "loretmtext,";
$mes3 = "loremtext";
$mes4 = "Code:".$code;
$mes5 = "e:".$name;
$mes6 = "text";

$msg = $mes2."
".$mes3."
".$mes4."
".$mes5."
".$mes6."
"; // 假设 $msg 被直接发送

如果发送此 $msg 时未明确指定邮件的 Content-Type 为 text/html,邮件客户端会将其默认为纯文本,从而无法正确渲染
标签。要解决此问题,关键在于告知邮件客户端邮件体是 HTML 格式。

Laravel Mailable:发送 HTML 邮件的最佳实践

Laravel 提供了一个强大且优雅的 Mailable 系统来构建和发送邮件。使用 Mailable 类和 Blade 模板是发送 HTML 邮件并确保正确渲染的最佳实践,因为它会自动处理 Content-Type: text/html 头部设置。

立即学习前端免费学习笔记(深入)”;

示例:创建和发送 HTML 邮件

以下步骤将指导您如何在 Laravel 中创建一个包含换行符和其他 HTML 格式的邮件。

步骤一:生成 Mailable 类

首先,使用 Artisan 命令生成一个新的 Mailable 类。

php artisan make:mail MyHtmlMail

这将在 app/Mail 目录下创建一个 MyHtmlMail.php 文件。

步骤二:定义邮件视图 (Blade 模板)

接下来,创建一个 Blade 模板来定义您的 HTML 邮件内容。Blade 模板允许您使用 HTML 标签,并且可以动态插入数据。

在 resources/views/emails/my-html-message.blade.php 创建以下文件:




    重要通知
    


    

尊敬的 {{ $name }},您好!

这是一段包含多行内容的通知邮件。

您的操作验证码是:{{ $code }}

请在规定时间内使用此验证码完成操作。此邮件由系统自动发送,请勿直接回复。

Insou AI
Insou AI

Insou AI 是一款强大的人工智能助手,旨在帮助你轻松创建引人入胜的内容和令人印象深刻的演示。

下载

感谢您的使用!

在这个模板中,我们使用了

标签实现段落换行,并且通过 {{ $name }} 和 {{ $code }} 动态插入数据。

步骤三:配置 Mailable 类

编辑 app/Mail/MyHtmlMail.php 文件,将其配置为使用您创建的 Blade 模板,并传入所需的数据。

name = $name;
        $this->code = $code;
    }

    /**
     * 构建消息。
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('您的重要通知') // 设置邮件主题
                    ->view('emails.my-html-message') // 指定使用的 Blade 模板
                    ->with([ // 传递数据到模板
                        'name' => $this->name,
                        'code' => $this->code,
                    ]);
    }
}

在 build() 方法中,->view('emails.my-html-message') 明确告诉 Laravel 使用该 Blade 模板来渲染邮件内容。Laravel 会自动将其渲染为 HTML,并设置正确的 Content-Type: text/html 头部。

步骤四:发送邮件

最后,在您的控制器或任何需要发送邮件的地方,使用 Mail Facade 来发送您的 Mailable 实例。

input('name', '用户');
        $verificationCode = $request->input('code', '123456');
        $recipientEmail = $request->input('email', 'recipient@example.com'); // 收件人邮箱

        try {
            Mail::to($recipientEmail)->send(new MyHtmlMail($userName, $verificationCode));
            return response()->json(['message' => 'HTML 邮件已成功发送!'], 200);
        } catch (\Exception $e) {
            return response()->json(['message' => '邮件发送失败:' . $e->getMessage()], 500);
        }
    }
}

通过以上步骤,当 Mail::to(...)->send(new MyHtmlMail(...)) 被调用时,Laravel 会自动渲染 my-html-message.blade.php 模板,将其作为 HTML 邮件体发送,并确保邮件客户端正确解析其中的 HTML 标签,包括换行符。

直接设置邮件头(不推荐在 Laravel 中使用)

虽然 Laravel 的 Mailable 系统是推荐的方式,但了解底层原理有助于理解。如果是在纯 PHP 环境下,或者需要自定义 Laravel Mailable 无法直接满足的特殊头部,则需要手动设置 Content-Type 头部。

// 这是一个纯 PHP 示例,不适用于 Laravel Mailable 的标准用法
$to = 'recipient@example.com';
$subject = 'HTML 邮件测试';
$message = '

你好!

这是一段包含HTML内容的邮件。

这是第二行。

'; // 必须设置 Content-Type 头部 $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=UTF-8\r\n"; $headers .= "From: sender@example.com\r\n"; // 发件人 // 使用 PHP 的 mail() 函数发送 // mail($to, $subject, $message, $headers);

在 Laravel 中,通常不需要手动设置这些头部,因为 Mailable 类会为您处理。

注意事项与最佳实践

  1. 使用 Blade 模板: 始终优先使用 Blade 模板来构建邮件内容。它们不仅能自动处理 HTML 渲染和 Content-Type 设置,还能提供更好的可维护性、代码结构和安全性(例如防止 XSS 攻击)。
  2. 内联 CSS: 许多邮件客户端对外部样式表和
  3. 响应式设计: 考虑到用户可能在手机上查看邮件,设计邮件模板时应考虑响应式布局,以提供良好的用户体验。
  4. 多客户端测试: 在发送重要邮件之前,务必在不同的邮件客户端(如 Gmail、Outlook、Apple Mail、Thunderbird 等)进行测试,以确保显示效果符合预期。
  5. 纯文本备用: 对于那些不支持 HTML 的邮件客户端或出于辅助功能考虑,Mailable 允许您通过 ->text('emails.my-plain-text-message') 方法提供一个纯文本版本。这会创建一个多部分邮件,其中包含 HTML 和纯文本两种版本,客户端会选择最适合的版本显示。

总结

在 Laravel 中发送包含 HTML 格式内容(如换行符
)的邮件,核心在于确保邮件客户端将邮件体解析为 HTML。通过利用 Laravel 强大的 Mailable 系统和 Blade 模板,您可以轻松实现这一点,因为 Mailable 会自动为您处理 Content-Type: text/html 头部。遵循使用模板、考虑内联 CSS 和进行多客户端测试等最佳实践,将有助于您构建出专业且兼容性强的电子邮件通知系统。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2890

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1731

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1564

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

1099

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1546

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1277

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1649

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1309

2023.11.13

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

58

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 23.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号