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 属性的数据会自动传给模板。
resources/views/mail/orders/shipped.blade.php:
with 显式传数据,此时属性可设为 protected 或 private:
发送邮件
使用Mail 门面的 to() 指定收件人,然后 send():
使用队列发送邮件
邮件发送会影响响应时间,建议通过队列在后台发送。ShouldQueue 后,调用 send() 也会自动进入队列:
用 PHP 属性指定队列连接与名称
用 PHP 属性可以在类级别声明式指定,无需on()->queue() 链式调用:
创建 Markdown 邮件
Markdown 邮件可以使用 Laravel 提供的美观响应式 HTML 模板。生成 Markdown Mailable
用--markdown 选项生成:
content() 中使用 markdown 参数:
编写 Markdown 模板
使用 Laravel 提供的 Blade 组件:邮件预览
在路由中返回 Mailable 实例即可在浏览器预览,便于开发调试:本地开发的邮件
为避免误发邮件到生产环境,可在本地使用 Mailpit 等工具:也可用
log 驱动把邮件内容写入日志,是最简单的确认方式。