You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中如何直接向用户发送密码重置邮件?

Laravel忘记密码邮件发送问题解决

问题根源

Mailtrap是测试专用的邮件捕获工具,它的核心功能就是拦截所有Laravel发送的出站邮件,存储到你的Mailtrap收件箱中,不会真正投递到目标用户邮箱——这是它的设计逻辑,不是你代码写错了。

两种解决途径

1. 继续用Mailtrap测试,让真实邮箱收到转发邮件

如果你还想留在测试环境,同时要验证邮件是否能到达真实邮箱,可以设置Mailtrap的自动转发:

  • 登录Mailtrap后台,进入你正在使用的Inbox
  • 切换到「Forwarding」标签页
  • 开启「Forward to email」选项,输入你用来接收测试邮件的真实邮箱地址
  • 保存设置后,Laravel发送给用户的重置邮件会先被Mailtrap捕获,再自动转发到你指定的真实邮箱里

2. 切换真实SMTP,直接发送到用户邮箱

如果需要邮件真正投递到用户填写的邮箱(适合非测试环境),修改Laravel的邮件配置即可:

  1. 打开项目根目录的.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}"
      
  2. 执行命令清除配置缓存:
    php artisan config:clear
    
  3. 重新测试忘记密码功能,此时邮件会直接发送到用户填写的邮箱收件箱。

常见错误检查

  • 确认代码没有硬编码收件人:Laravel默认的ForgotPasswordController会使用用户提交的邮箱地址,检查sendResetLinkEmail方法是否被修改,默认逻辑无需改动
  • 验证用户输入的邮箱地址格式正确、有效

内容的提问来源于stack exchange,提问作者Emre Kd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:45:31