Strapi管理控制台注册用户时邮箱验证功能不生效如何解决
Strapi管理面板新增用户不发送验证邮件排查方案
首先明确核心逻辑差异:
Strapi官方Users & Permissions插件的公开注册接口
/api/auth/local/register默认内置了注册成功自动发送验证邮件的逻辑,但管理面板手动创建用户的流程默认没有绑定自动发验证邮件的触发规则。既然你调用公开注册接口用户能正常收到邮件,已经证明SMTP发信配置、邮件模板都是正常的,90%以上的这类问题都是默认逻辑差异导致的,不是配置错误。
排查步骤
- 先验证发信链路是否正常
进入管理面板的用户列表,找到你之前创建的未确认状态用户,进入详情页点击「Resend confirmation email(重发确认邮件)」按钮。如果用户能正常收到邮件,就可以完全排除发信配置故障,问题就是默认没有自动触发逻辑。
如果点重发也收不到,再检查config/plugins.js中Users & Permissions插件的邮件配置,确认没有单独给管理端操作配置错误的发信人地址、模板——正常来说公开接口能发,这块配置不会有问题。 - 检查创建用户时的参数设置
确认你在管理面板新建用户时,没有误勾选「confirmed(已确认)」选项:用户标记为已确认状态时,系统不会发送验证邮件。
确认创建用户时填写的邮箱地址格式正确,没有拼写错误。
解决方案:实现管理面板创建用户自动发验证邮件
默认逻辑不支持的情况下,通过用户模型生命周期钩子就能实现需求,不需要改管理面板前端代码,兼容所有Strapi v4/v5版本:
- 找到项目中
src/extensions/users-permissions/content-types/user/路径,没有对应目录就逐层新建 - 在该路径下新建
lifecycles.js文件,写入以下代码:
module.exports = { async afterCreate(event) { const { result } = event; // 仅对未确认、绑定了有效邮箱的用户触发验证邮件 if (result.confirmed === false && result.email) { try { // 调用插件内置的发信方法,和公开注册接口的发信逻辑、模板完全一致 await strapi.plugin('users-permissions').service('user').sendConfirmationEmail(result); } catch (err) { strapi.log.error('管理面板新建用户发送验证邮件失败:', err); } } } };
- 保存文件后重启Strapi服务,之后在管理面板新建用户时,只要不勾选「confirmed」选项,保存后就会自动给用户发送验证邮件,效果和公开接口注册完全一致。
特殊情况处理
如果配置完钩子还是不触发,检查两点:
- 如果你用的是低于4.1.0的Strapi v4早期版本,管理面板的创建操作不会触发内容类型的生命周期钩子,这时候可以通过扩展admin端的用户创建控制器,在创建用户的逻辑后追加上面的发信代码即可。
- 查看Strapi运行日志,如果有明确的发信报错,根据报错提示检查对应配置即可,这类情况非常少见,毕竟公开接口发信已经验证了链路正常。
内容的提问来源于stack exchange,提问作者Suraj Suddala
相关产品推荐
相关产品推荐

