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

Laravel生产环境密码重置邮件无法发送,提示password_resets表不存在求助

解决Laravel密码重置邮件无法发送及表不存在问题

看起来你的问题主要出在两个核心点:password_resets表的结构不符合要求,加上Gmail的SMTP配置有过时的地方,咱们一步步来搞定:

1. 先搞定password_resets表的问题

从错误日志能明确看到,系统找不到这个表——哪怕你手动建了,肯定是表结构不对,Laravel的密码重置功能对这个表的字段有严格要求。

正确的表结构SQL

直接通过你的数据库管理工具(比如phpMyAdmin、Navicat)执行下面的SQL语句,替换掉你之前手动建的表:

CREATE TABLE password_resets (
    email VARCHAR(255) NOT NULL,
    token VARCHAR(255) NOT NULL,
    created_at TIMESTAMP NULL DEFAULT NULL,
    PRIMARY KEY (email)
);

因为你是线上环境没法用php artisan migrate,直接跑SQL是最稳妥的方式。

2. 修复Gmail的SMTP配置坑

你提到开启了“低安全应用”权限,但Google早在2022年就停用这个功能了,而且端口用25也容易被服务器封禁,调整一下配置:

  • 先给你的Gmail账号开启两步验证
  • 去Google账号设置里创建一个应用专用密码,用这个密码替换.env里的MAIL_PASSWORD
  • 把端口改成587,这个是Gmail推荐的SMTP端口

修正后的.env邮箱配置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=你的应用专用密码
MAIL_ENCRYPTION=tls

3. 别漏了CSRF令牌!

看你贴的表单代码里没有@csrf字段,Laravel默认会验证CSRF,没有这个的话请求会直接被拦截,表单里必须加上:

<form action="{{ url('passwords/email') }}" method='post'>
    @csrf <!-- 一定要加这个! -->
    <input type="email" name='email' class="form-control" id="exampleInputPassword1" placeholder="Enter Your Email Here" style='text-align:center'>
    <button type='submit'>Send Link to Email to Reset Password</button>
</form>

最后测试流程

做完上面三步后,再测试密码重置:

  1. 输入邮箱提交,看页面有没有返回“重置链接已发送”的提示
  2. 如果还是有问题,去storage/logs里看最新的错误日志,排查剩余问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:25:37