Laravel项目中如何直接向用户发送密码重置邮件?
Laravel忘记密码邮件发送问题解决
问题根源
Mailtrap是测试专用的邮件捕获工具,它的核心功能就是拦截所有Laravel发送的出站邮件,存储到你的Mailtrap收件箱中,不会真正投递到目标用户邮箱——这是它的设计逻辑,不是你代码写错了。
两种解决途径
1. 继续用Mailtrap测试,让真实邮箱收到转发邮件
如果你还想留在测试环境,同时要验证邮件是否能到达真实邮箱,可以设置Mailtrap的自动转发:
- 登录Mailtrap后台,进入你正在使用的Inbox
- 切换到「Forwarding」标签页
- 开启「Forward to email」选项,输入你用来接收测试邮件的真实邮箱地址
- 保存设置后,Laravel发送给用户的重置邮件会先被Mailtrap捕获,再自动转发到你指定的真实邮箱里
2. 切换真实SMTP,直接发送到用户邮箱
如果需要邮件真正投递到用户填写的邮箱(适合非测试环境),修改Laravel的邮件配置即可:
- 打开项目根目录的
.env文件,替换Mailtrap相关配置为真实SMTP服务信息(以下是两个常用示例):- 用Gmail(需开启Google账号应用密码):
MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=你的Gmail邮箱地址 MAIL_PASSWORD=你的Google应用密码 MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=你的Gmail邮箱地址 MAIL_FROM_NAME="${APP_NAME}" - 用SendGrid:
MAIL_MAILER=smtp MAIL_HOST=smtp.sendgrid.net MAIL_PORT=587 MAIL_USERNAME=apikey MAIL_PASSWORD=你的SendGrid API密钥 MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=你的发件邮箱地址 MAIL_FROM_NAME="${APP_NAME}"
- 用Gmail(需开启Google账号应用密码):
- 执行命令清除配置缓存:
php artisan config:clear - 重新测试忘记密码功能,此时邮件会直接发送到用户填写的邮箱收件箱。
常见错误检查
- 确认代码没有硬编码收件人:Laravel默认的
ForgotPasswordController会使用用户提交的邮箱地址,检查sendResetLinkEmail方法是否被修改,默认逻辑无需改动 - 验证用户输入的邮箱地址格式正确、有效
内容的提问来源于stack exchange,提问作者Emre Kd
相关产品推荐
相关产品推荐

