0

0

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

碧海醫心

碧海醫心

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

|

483人浏览过

|

来源于php中文网

原创

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

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

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

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

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

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

$msg = $mes2."<br />".$mes3."<br />".$mes4."<br />".$mes5."<br />".$mes6."<br />";

// 假设 $msg 被直接发送

如果发送此 $msg 时未明确指定邮件的 Content-Type 为 text/html,邮件客户端会将其默认为纯文本,从而无法正确渲染 <br /> 标签。要解决此问题,关键在于告知邮件客户端邮件体是 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 创建以下文件:

OmniAudio
OmniAudio

OmniAudio 是一款通过 AI 支持将网页、Word 文档、Gmail 内容、文本片段、视频音频文件都转换为音频播客,并生成可在常见 Podcast ap

下载
<!DOCTYPE html>
<html>
<head>
    <title>重要通知</title>
    <style>
        /* 简单的内联 CSS 示例 */
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
        h1 { color: #0056b3; }
        strong { color: #d9534f; }
    </style>
</head>
<body>
    <h1>尊敬的 {{ $name }},您好!</h1>
    <p>这是一段包含多行内容的通知邮件。</p>
    <p>您的操作验证码是:<strong>{{ $code }}</strong></p>
    <p>请在规定时间内使用此验证码完成操作。此邮件由系统自动发送,请勿直接回复。</p>
    <p>感谢您的使用!</p>
</body>
</html>

在这个模板中,我们使用了 <p> 标签实现段落换行,并且通过 {{ $name }} 和 {{ $code }} 动态插入数据。

步骤三:配置 Mailable 类

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

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class MyHtmlMail extends Mailable
{
    use Queueable, SerializesModels;

    public $name;
    public $code;

    /**
     * 创建一个新的消息实例。
     *
     * @param  string  $name
     * @param  string  $code
     * @return void
     */
    public function __construct($name, $code)
    {
        $this->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 实例。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\MyHtmlMail; // 引入您创建的 Mailable 类

class NotificationController extends Controller
{
    /**
     * 发送通知邮件。
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function sendNotification(Request $request)
    {
        // 假设从请求中获取数据
        $userName = $request->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 = '<h1>你好!</h1><p>这是一段包含<strong>HTML</strong>内容的邮件。</p><p>这是第二行。</p>';

// 必须设置 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: 许多邮件客户端对外部样式表和 <style> 标签的支持有限。为了确保邮件在不同客户端上的一致性,推荐使用内联 CSS。Laravel 的 Markdown 邮件模板在编译时会自动将 CSS 内联化,或者您可以考虑使用第三方工具
  3. 响应式设计: 考虑到用户可能在手机上查看邮件,设计邮件模板时应考虑响应式布局,以提供良好的用户体验。
  4. 多客户端测试: 在发送重要邮件之前,务必在不同的邮件客户端(如 Gmail、Outlook、Apple Mail、Thunderbird 等)进行测试,以确保显示效果符合预期。
  5. 纯文本备用: 对于那些不支持 HTML 的邮件客户端或出于辅助功能考虑,Mailable 允许您通过 ->text('emails.my-plain-text-message') 方法提供一个纯文本版本。这会创建一个多部分邮件,其中包含 HTML 和纯文本两种版本,客户端会选择最适合的版本显示。

总结

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

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

340

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

294

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

774

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

386

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

146

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

81

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

655

2026.03.04

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

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

精品课程

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

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 43.3万人学习

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

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