Halo邮箱验证:注册即发验证码,把假邮箱挡在门外
【免费下载链接】haloHalo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。项目地址: https://gitcode.com/GitHub_Trending/ha/halo
给 Halo 装上邮箱验证(Email Verification),注册和改邮箱时都要输对 6 位验证码,证明你确实拥有这个邮箱。配完之后,密码重置、评论通知这些邮件才有了可靠的去处。
配好邮件渠道:SMTP地址、端口、授权码
Halo 的验证邮件由通知中心发出(简单说,通知中心负责决定"消息往哪个渠道送"),邮件渠道则依赖 SMTP——发信邮局,参数要向你的邮箱服务商要。
后台入口:管理后台 → 系统设置 → 通知设置 → 邮件渠道。这里没有邮件选项?先装插件。邮件渠道由"邮件通知"插件提供,去 设置 → 插件 列表里找到它装上,再回通知设置就能看到 SMTP 表单。
端口选 465 还是 587
两个都对,看服务商支持:465 走 SSL(加密从建立连接就开始),587 走 TLS(先明文后升级加密)。填错了的典型症状是保存时连接超时,以你邮箱服务商的说明为准。
授权码和登录密码不是一回事
⚠️ 表单里的"密码"栏填的不是账号密码。QQ 邮箱、163 邮箱都在"设置 → 账户安全"里单独生成一串授权码(也叫客户端授权码),填登录密码大概率连接失败。
邮件渠道定义、通知设置页源码
自定义验证邮件模板
默认模板是中文的,大致是"XX 你好:使用下面的动态验证码(OTP)验证您的电子邮件地址……验证码有效期 10 分钟"。想改称呼、改语气,用模板变量。
模板里能用的三个变量
username(收信人用户名)、code(6 位验证码)、expirationAtMinutes(有效期分钟数)。默认模板定义在 notification-templates.yaml 里,界面找不到编辑入口时,直接看这个文件。
走一遍完整验证:注册和改邮箱
新用户:注册即验证
打开注册页,填用户名、邮箱、密码提交。系统立刻往邮箱发验证码,页面提示输入 6 位数字。输对之后,用户资料里的emailVerified才置为 true,注册才算真正完成。
老用户:改邮箱要重新验证
登录用户中心修改邮箱后,原邮箱的验证状态作废,页面会要求对新邮箱重新收码验证。这也是防"改邮箱劫持"的关键设计:谁收到新邮箱的验证码,谁才算拥有它。
✅ 输对验证码后,邮箱旁会显示已验证状态,这条链路就通了。
验证码的规矩:10分钟、5次、1小时
📌 这套限制写在 EmailVerificationServiceImpl 里,共三条:
- 有效期 10 分钟:验证码写入缓存后 10 分钟自动清除,源码里就一行
expireAfterWrite(CODE_EXPIRATION_MINUTES, TimeUnit.MINUTES) - 同一验证码最多试 5 次:错满 5 次,该邮箱进入黑名单,1 小时内不能再验证
- 重发频率:两次发送验证邮件的间隔不小于 1 分钟,防止有人刷邮件
想调整这些数值?默认值通常够用,具体改法以官方文档为准:邮箱验证设计文档
收不到验证邮件?三种情况
- 现象:点"发送验证码",收件箱和垃圾箱都没有。根因:SMTP 认证失败或端口不通,邮件根本没发出去。操作:回通知设置核对 SMTP 账号、授权码、端口,先测试连接;再看服务器日志有没有出站报错。
- 现象:提示"验证码无效或已过期"。根因:验证码 10 分钟作废,且只对"当前请求验证的那个邮箱"有效,换过邮箱后用旧邮件的码必错。操作:点重发,10 分钟内把新码输完。
- 现象:提示"操作过于频繁"。根因:距上次发送不足 1 分钟,或 10 分钟内错满 5 次被临时拉黑。操作:等 1 分钟或 1 小时后再试。
到这里邮箱验证闭环了。下一步建议把"找回密码"的邮件渠道也走一遍测试——它和验证邮件走的是同一个通知中心,配好一次,两个功能都通。
【免费下载链接】haloHalo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。项目地址: https://gitcode.com/GitHub_Trending/ha/halo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考