porsche5130 e1c2ea46f3 修正多租戶 Cookie 隔離與郵件查看功能
## 主要修正

1. **Cookie 隔離機制** (多租戶支援)
   - 改用租戶專屬 Cookie: `webmail_session_{tenant_code}`
   - 設定 Cookie path 為 `/{tenant_code}` 確保隔離
   - 解決兩個租戶共用 Cookie 導致互相覆蓋的問題

2. **郵件查看 API 修正**
   - 修正路由定義: `{{mail_id}}` → `{mail_id}` (FastAPI 路由語法錯誤)
   - 修正函數呼叫: `get_mail_detail` → `get_mail_by_id`

3. **Session 讀取機制更新**
   - Callback: 設定租戶專屬 Cookie
   - Inbox/Compose/API: 從 `request.cookies.get(f"webmail_session_{tenant_code}")` 讀取
   - 移除對 SessionMiddleware 的依賴 (改用手動 Cookie 管理)

4. **PKCE 錯誤訊息優化**
   - 增加 PKCE 驗證失敗的詳細錯誤訊息
   - 提示可能的失敗原因 (過期、舊連結、Redis 連線)

## 測試狀態
-  修正路由與函數呼叫錯誤
-  實作租戶專屬 Cookie 機制
- 🔧 待測試:兩個租戶同時登入不互相干擾

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-04 04:35:28 +08:00

WebMail Gateway

多租戶 WebMail Gateway整合 Keycloak SSO 和 IMAP/SMTP 郵件服務。

功能

  • 🔐 Keycloak SSO 整合 (支援 PKCE)
  • 📧 IMAP/SMTP 郵件收發
  • 🏢 多租戶支援 (路徑參數路由)
  • 🔄 Redis Session 管理
  • 🎨 多主題支援 (待恢復)
  • 📎 附件支援 (待恢復)

技術架構

  • 後端: FastAPI + Python 3.11
  • 資料庫: PostgreSQL (Virtual MIS Database)
  • 快取: Redis
  • 認證: Keycloak OAuth 2.0 + PKCE
  • 郵件: IMAP (port 143) / SMTP (port 587)
  • 部署: Docker + Traefik

開發環境

目錄結構

webmail-gateway/
├── app.py                 # 主程式
├── requirements.txt       # Python 依賴
├── Dockerfile            # Docker 映像檔定義
├── docker-compose.yml    # Docker Compose 配置
└── README.md            # 說明文件

本地開發

# 安裝依賴
pip install -r requirements.txt

# 設定環境變數
export REDIS_HOST=10.1.0.20
export REDIS_PORT=6379
export REDIS_PASSWORD=DC1qaz2wsx
export REDIS_DB=2
export DATABASE_URL=postgresql://admin:DC1qaz2wsx@10.1.0.20:5433/virtual_mis
export KEYCLOAK_SERVER_URL=https://auth.lab.taipei

# 啟動開發伺服器
uvicorn app:app --host 0.0.0.0 --port 8000 --reload

部署到正式環境

# 1. 推送到 Gitea
git add .
git commit -m "Update WebMail Gateway"
git push origin main

# 2. SSH 到伺服器
ssh porsche@10.1.0.254

# 3. 拉取最新代碼
cd /home/porsche/services/webmail-gateway
git pull

# 4. 重建並啟動容器
docker compose down
docker compose build
docker compose up -d

多租戶路由

訪問方式

自動導向邏輯

  1. 使用者訪問 /{tenant_code}
  2. 查詢租戶資訊 (從 Virtual MIS Database)
  3. 取得對應的 Keycloak Realm
  4. 生成 PKCE 參數
  5. 導向 Keycloak 登入頁面
  6. 回調處理並驗證 PKCE
  7. 建立 Session 並導向收件匣

Keycloak 配置

每個租戶的 Realm 都需要建立 webmail client

待辦事項

  • 恢復完整 Gmail 風格 UI
  • 恢復主題切換功能
  • 恢復郵件詳情 Modal
  • 恢復批次刪除功能
  • 恢復 Rich Text 編輯器
  • 建立 Gitea 遠端倉庫
  • 設定 CI/CD 流程

版本歷史

  • v1.0 (2026-03-04): 基礎 PKCE 支援 + 多租戶路由
Description
No description provided
Readme 84 KiB
Languages
Python 99.3%
Batchfile 0.6%
Dockerfile 0.1%