跳转到主要内容

Laravel 邮件功能概览

Laravel 邮件基于 Symfony Mailer,支持 SMTP、Mailgun、Postmark、Resend、Amazon SES、sendmail 等驱动。
以前使用的 SwiftMailer 已被废弃。Laravel 9 起使用 Symfony Mailer。
邮件配置写在 config/mail.php。可通过 .env 切换驱动:

创建 Mailable 类

Laravel 把每种邮件表达为「Mailable」类。使用 make:mail 命令生成:
生成到 app/Mail/

Mailable 设置

生成的 Mailable 类有 envelope()content()attachments() 三个方法。

设置发件人

envelope() 中指定发件人:
config/mail.php 中设置全局默认发件人可省略单独指定:

设置邮件正文

content() 中指定 Blade 模板。构造器中赋值给 public 属性的数据会自动传给模板。
对应 Blade 模板 resources/views/mail/orders/shipped.blade.php
也可以通过 with 显式传数据,此时属性可设为 protectedprivate

发送邮件

使用 Mail 门面的 to() 指定收件人,然后 send()
也可指定抄送/密送:
使用特定 mailer:

使用队列发送邮件

邮件发送会影响响应时间,建议通过队列在后台发送。
使用队列前需先配置好队列并启动 worker。
延时发送:
在 Mailable 类上实现 ShouldQueue 后,调用 send() 也会自动进入队列:

用 PHP 属性指定队列连接与名称

用 PHP 属性可以在类级别声明式指定,无需 on()->queue() 链式调用:

创建 Markdown 邮件

Markdown 邮件可以使用 Laravel 提供的美观响应式 HTML 模板。

生成 Markdown Mailable

--markdown 选项生成:
content() 中使用 markdown 参数:

编写 Markdown 模板

使用 Laravel 提供的 Blade 组件:
可用组件:
Markdown 邮件会同时生成纯文本版本,兼容不支持 HTML 的客户端。

邮件预览

在路由中返回 Mailable 实例即可在浏览器预览,便于开发调试:

本地开发的邮件

为避免误发邮件到生产环境,可在本地使用 Mailpit 等工具:
Laragon、Laravel Herd 默认已包含 Mailpit。
也可用 log 驱动把邮件内容写入日志,是最简单的确认方式。

小结

最后修改于 2026年7月18日