3.0 KiB
3.0 KiB
注册邮件发送失败问题修复指南
🔍 问题描述
注册时出现错误:Error sending confirmation email (500 Internal Server Error)
原因:
- Supabase 配置了
ENABLE_EMAIL_AUTOCONFIRM=false,需要发送确认邮件 - SMTP 配置使用的是假服务(
supabase-mail,fake_mail_user),无法发送邮件 - 当 Supabase 尝试发送邮件时失败,返回 500 错误
✅ 解决方案
方案一:启用自动确认(推荐,开发环境)
修改 supabase_pro/.env 文件:
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true # 改为 true,跳过邮件验证
优点:
- 注册后立即可以登录,无需邮件验证
- 适合开发和测试环境
缺点:
- 生产环境建议使用真实的邮件服务
方案二:配置真实的 SMTP 服务
修改 supabase_pro/.env 文件,配置真实的 SMTP 服务:
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=false
SMTP_ADMIN_EMAIL=your-admin@example.com
SMTP_HOST=smtp.example.com # 真实的 SMTP 服务器
SMTP_PORT=587 # 或 465 (SSL)
SMTP_USER=your-smtp-user
SMTP_PASS=your-smtp-password
SMTP_SENDER_NAME=Your App Name
常用 SMTP 服务:
- Gmail:
smtp.gmail.com:587 - 163:
smtp.163.com:465 - QQ:
smtp.qq.com:587 - SendGrid, Mailgun 等第三方服务
方案三:使用 Supabase 本地邮件服务(开发环境)
如果使用 Docker Compose 运行 Supabase,可以使用内置的邮件服务:
- 确保
supabase-mail服务正常运行 - 检查邮件服务日志:
docker-compose logs supabase-mail - 如果服务未运行,启动它:
docker-compose up -d supabase-mail
🔧 已实施的代码修复
已改进注册页面的错误处理:
- 检查邮件发送失败错误:如果返回 500 错误且错误信息包含 "confirmation email",会给出友好提示
- 即使邮件发送失败,用户可能已创建:提示用户稍后尝试登录
- 改进错误提示:更清晰的错误信息
📝 验证步骤
-
修改配置后,重启 Supabase:
cd supabase_pro docker-compose restart auth -
测试注册:
- 尝试注册新用户
- 如果使用
ENABLE_EMAIL_AUTOCONFIRM=true,应该立即可以登录 - 如果使用真实 SMTP,检查邮箱是否收到确认邮件
-
检查数据库:
-- 检查 auth.users 表中是否有新用户 SELECT id, email, email_confirmed_at, created_at FROM auth.users ORDER BY created_at DESC LIMIT 5; -- 检查 ak_users 表中是否有对应记录 SELECT id, email, username, created_at FROM ak_users ORDER BY created_at DESC LIMIT 5;
🎯 推荐配置(开发环境)
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true # 开发环境跳过邮件验证
这样注册后可以立即登录,无需等待邮件确认。