Mailable类是组织邮件内容的基础,Markdown是增强样式的增强方式;需用php artisan make:mail --markdown生成并绑定视图路径,模板中必须使用mail::button等Blade组件控制样式,不可混用Notification的MailMessage::action()。

Mailable 类是基础,Markdown 是增强样式的方式
从 Laravel 9 到 11,Mailable 类的结构和核心方法保持一致:它仍是组织邮件内容的首选方式。你用 php artisan make:mail WelcomeEmail 生成类,重写 envelope() 设置主题/收件人,content() 指定视图路径,build() 可附加文件或配置 SwiftMailer/Symfony Mailer 实例。关键区别不在类本身,而在于你选择用普通 Blade 视图还是 Markdown 视图来渲染内容。
Markdown 邮件必须显式生成并绑定视图路径
直接在 Mailable 类里 return new MailMessage() 是通知(Notification)的做法,不是 Mailable 的用法。对 Mailable 使用 Markdown,必须在生成命令中带 --markdown 参数:
- php artisan make:mail OrderShipped --markdown=mail.order.shipped
- 该命令会创建 Mailable 类,并自动生成 resources/views/mail/order/shipped.blade.php
- 类中 content() 方法会自动返回 view('mail.order.shipped'),无需手动写 view() 调用
- 若漏掉 --markdown,即使视图存在,也不会启用 Laravel 的 Markdown 渲染器,CSS 和组件(如 mail::button)将不生效
Markdown 模板里用 mail::button 才能真正控制样式
纯 Markdown 写法(如 [Reset](url))无法定制按钮颜色或响应式行为。Laravel 提供的是扩展语法,必须用 Blade 组件:
将选定的 Obsidian 笔记发布为静态站点并部署到 Cloudflare Pages。
- @component('mail::button', ['url' => $url, 'color' => 'success']) —— color 支持 success、error、primary 等预设值
- 更灵活的方式是用 style 属性:@component('mail::button', ['url' => $url, 'style' => 'background-color:#007bff; color:white;'])
- 不要试图在 toMail() 中 return (new MailMessage)->action(...),那是 Notification 类的逻辑,Mailable 不识别
- 所有样式都应通过组件参数或内联 style 控制,避免在模板里写 标签,多数邮件客户端会过滤
驱动配置统一,但环境变量名已标准化
Laravel 9 起逐步过渡到 MAIL_MAILER,到 Laravel 11 已为强制项。无论哪个版本,都要确保:
- .env 中设置 MAIL_MAILER=smtp(或 mailgun、ses、log 等)
- SMTP 场景下补全 MAIL_HOST、MAIL_PORT、MAIL_USERNAME、MAIL_PASSWORD、MAIL_ENCRYPTION
- 发件人信息用 MAIL_FROM_ADDRESS 和 MAIL_FROM_NAME,不再依赖 config/mail.php 中的 from 数组
- 开发时推荐先设 MAIL_MAILER=log,查看 storage/logs/laravel.log 中渲染出的原始 HTML,确认内容和链接是否正确










