# 注册邮件发送失败问题修复指南

## 🔍 问题描述

注册时出现错误：`Error sending confirmation email` (500 Internal Server Error)

**原因**：
- Supabase 配置了 `ENABLE_EMAIL_AUTOCONFIRM=false`，需要发送确认邮件
- SMTP 配置使用的是假服务（`supabase-mail`, `fake_mail_user`），无法发送邮件
- 当 Supabase 尝试发送邮件时失败，返回 500 错误

## ✅ 解决方案

### 方案一：启用自动确认（推荐，开发环境）

修改 `supabase_pro/.env` 文件：

```env
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true  # 改为 true，跳过邮件验证
```

**优点**：
- 注册后立即可以登录，无需邮件验证
- 适合开发和测试环境

**缺点**：
- 生产环境建议使用真实的邮件服务

---

### 方案二：配置真实的 SMTP 服务

修改 `supabase_pro/.env` 文件，配置真实的 SMTP 服务：

```env
## 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，可以使用内置的邮件服务：

1. 确保 `supabase-mail` 服务正常运行
2. 检查邮件服务日志：
   ```bash
   docker-compose logs supabase-mail
   ```
3. 如果服务未运行，启动它：
   ```bash
   docker-compose up -d supabase-mail
   ```

---

## 🔧 已实施的代码修复

已改进注册页面的错误处理：

1. **检查邮件发送失败错误**：如果返回 500 错误且错误信息包含 "confirmation email"，会给出友好提示
2. **即使邮件发送失败，用户可能已创建**：提示用户稍后尝试登录
3. **改进错误提示**：更清晰的错误信息

---

## 📝 验证步骤

1. **修改配置后，重启 Supabase**：
   ```bash
   cd supabase_pro
   docker-compose restart auth
   ```

2. **测试注册**：
   - 尝试注册新用户
   - 如果使用 `ENABLE_EMAIL_AUTOCONFIRM=true`，应该立即可以登录
   - 如果使用真实 SMTP，检查邮箱是否收到确认邮件

3. **检查数据库**：
   ```sql
   -- 检查 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;
   ```

---

## 🎯 推荐配置（开发环境）

```env
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true  # 开发环境跳过邮件验证
```

这样注册后可以立即登录，无需等待邮件确认。
