laravel发邮件需正确配置驱动(SMTP或Mailgun)并使用mailable类,SMTP常用qq邮箱(授权码非密码)、Mailgun需域名验证;调试关键在环境配置、加密方式、域名状态及队列监听。

在 Laravel 中发送邮件,核心是配置邮件驱动(如 SMTP 或 Mailgun),再通过 Mailable 类封装内容,最后用 Mail::send() 或 Mail::to()->send() 发出。关键不在“能不能发”,而在“配得对不对、发得稳不稳”。
SMTP 配置:用 QQ 邮箱或企业邮箱最常见
多数人首选 SMTP,因为可控性强、调试直观。以 QQ 邮箱为例(需开启 POP3/SMTP 服务并获取授权码):
- 修改 .env 文件:
- 运行
php artisan config:clear清除配置缓存,否则改了 .env 也不生效 - 测试是否通:终端执行
php artisan tinker,然后输入:use IlluminateSupportFacadesMail; Mail::raw('测试邮件内容', function ($message) { $message->to('target@example.com')->subject('Laravel SMTP 测试'); });如果没报错,邮箱收到信,说明 SMTP 配通了
Mailgun 配置:适合批量、追踪和高可靠性场景
Mailgun 提供 API 密钥、域名验证和发送日志,适合正式项目。前提是已注册 Mailgun 账户,并完成域名验证(如 mg.yoursite.com):
- 在 .env 中填入 Mailgun 参数:
MAIL_MAILER=mailgun MAILGUN_DOMAIN=mg.yoursite.com MAILGUN_SECRET=key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx MAILGUN_ENDPOINT=https://api.mailgun.net/v3 - 确保
config/mail.php中mailgun驱动配置完整(Laravel 9+ 默认已含,无需额外改) - 验证域名后,先用 Mailgun 控制台发一封测试邮件,确认 dns 和验证状态正常,再切回 Laravel 测试
写一个可复用的 Mailable 类
别总用 Mail::raw(),结构化邮件更易维护:
- 生成类:
php artisan make:mail WelcomeEmail - 在
app/Mail/WelcomeEmail.php中定义数据和视图:public function __construct(public string $name) {} public function build() { return $this->view('emails.welcome')->with(['name' => $this->name]); } - 创建视图
resources/views/emails/welcome.blade.php,用 Blade 写 html 邮件模板 - 发送时调用:
Mail::to('user@example.com')->send(new WelcomeEmail('张三'));
调试与排错要点
发不出邮件?90% 是这几个地方卡住:
- 环境没切对:本地开发用
MAIL_MAILER=log先看日志是否生成(storage/logs/laravel.log),避免直接怼生产配置 - ssl/TLS 混用:QQ 邮箱用
MAIL_PORT=587 + MAIL_ENCRYPTION=tls;若用 465 端口,则改ssl,且部分 PHP 版本需额外启用openssl扩展 - Mailgun 域名未验证或未启用:控制台里看 Domain Status 是否为 “Active”,Sending access 是否开启
- 队列没跑:如果用了
->queue(),记得启动队列监听:php artisan queue:work
基本上就这些。配对驱动、写好 Mailable、看清错误日志,Laravel 发邮件不复杂但容易忽略细节。
以上就是Laravel如何发送邮件?(Mailgun和SMTP配置教程)的详细内容,更多请关注php中文网其它相关文章!