laravel邮件通知可通过五种方法实现:一、用mail门面直接发送;二、用mailable配合队列异步发送;三、用notification系统统一管理多通道;四、开发时用mailhog或log驱动调试;五、生产环境用mailgun等api驱动提升送达率。

如果您在Laravel应用中需要向用户发送邮件通知,但邮件未成功发出,则可能是由于邮件驱动配置错误、SMTP凭证无效或队列未正确处理。以下是实现Laravel邮件通知的多种方法:
一、使用Mail facade直接发送邮件
该方法适用于简单、即时的邮件发送场景,不依赖队列,适合测试或低频通知。Laravel通过Mail门面调用底层Mailer实例,直接渲染视图并投递。
1、在config/mail.php中确认默认驱动为smtp,并填写正确的MAIL_HOST、MAIL_PORT、MAIL_USERNAME和MAIL_PASSWORD。
2、创建邮件类:运行php artisan make:mail WelcomeNotification,在生成的app/Mail/WelcomeNotification.php中定义build()方法,调用$this->view('emails.welcome')指定模板。
3、在控制器中调用:Mail::to('user@example.com')->send(new WelcomeNotification());。
4、确保resources/views/emails/welcome.blade.php存在且包含有效HTML内容,支持Blade语法。
二、通过Mailable类配合队列异步发送
该方法可避免请求阻塞,提升响应速度,适用于高并发或含附件、延迟逻辑的邮件场景。邮件任务被推入队列后由worker异步执行。
1、在config/queue.php中设置默认连接(如database或redis),并运行php artisan queue:table与php artisan migrate创建队列表。
2、修改Mailable类的__construct()方法接收必要参数(如用户模型),并在build()中调用$this->onQueue('emails')指定队列名。
3、发送时使用Mail::to($user)->queue(new WelcomeNotification($user));替代send()。
4、启动队列监听器:php artisan queue:work --queue=emails,确保进程持续运行。
三、使用Notification系统统一管理多通道通知
该方法将邮件作为通知的一种通道,与其他通道(如数据库、短信、广播)共用同一抽象接口,便于扩展和复用逻辑。
1、运行php artisan make:notification AccountActivated生成通知类,在via()方法中返回['mail']。
2、在toMail()方法中返回MailMessage实例,调用subject()、line()、action()等链式方法构建内容。
3、在用户模型中实现routeNotificationForMail()方法,自定义收件地址;若未定义,则默认使用模型的email属性。
4、触发通知:$user->notify(new AccountActivated());,或批量发送:Notification::send($users, new AccountActivated());。
四、配置本地开发环境使用MailHog或Log驱动
该方法用于开发阶段安全预览邮件内容,避免误发真实用户,同时绕过SMTP认证限制,提升调试效率。
1、在.env中设置MAIL_MAILER=log,所有邮件将写入storage/logs/laravel.log,含完整HTML源码。
2、或安装MailHog(Docker方式:docker run -p 1025:1025 -p 8025:8025 mailhog/mailhog),然后设MAIL_MAILER=smtp、MAIL_HOST=localhost、MAIL_PORT=1025。
3、访问http://localhost:8025即可实时查看捕获的邮件列表与原始内容。
4、注意:切勿在生产环境使用log或MailHog驱动,必须切换为真实SMTP或API驱动(如Mailgun、SES)。
五、使用第三方邮件服务API驱动(以Mailgun为例)
该方法利用专业邮件服务商提供的HTTP API,提高送达率与可追踪性,适用于需统计打开率、退订管理的正式业务场景。
1、注册Mailgun账号,获取MAILGUN_DOMAIN(如sandbox123.mailgun.org)与MAILGUN_SECRET(私钥)。
2、在.env中配置:MAIL_MAILER=mailgun、MAILGUN_DOMAIN=your-domain、MAILGUN_SECRET=your-key。
3、确保composer require mailgun/mailgun-php已安装,并在config/services.php中添加mailgun配置项。
4、发送逻辑与Mail facade一致,Laravel自动调用Mailgun SDK封装HTTP请求,无需修改业务代码即可切换驱动。











