#!/usr/bin/env python3 """ Cloud Mail Token 生成脚本 使用方法: python get_cloudmail_token.py 注意:生成新 Token 会使之前的 Token 失效! """ import httpx import json import getpass def get_cloudmail_token(api_url: str, admin_email: str, admin_password: str): """ 调用 Cloud Mail API 生成 Token 参数: api_url: Cloud Mail API 基础 URL (例如: https://mygoband.com) admin_email: 管理员邮箱 admin_password: 管理员密码 返回: 生成的 Token 字符串 """ url = f"{api_url.rstrip('/')}/api/public/genToken" payload = { "email": admin_email, "password": admin_password } print(f"\n正在请求: {url}") print(f"管理员邮箱: {admin_email}") print("-" * 60) try: response = httpx.post( url, json=payload, headers={"Content-Type": "application/json"}, timeout=30.0 ) print(f"HTTP 状态码: {response.status_code}") print(f"响应内容: {response.text}\n") if response.status_code != 200: print(f"❌ 请求失败: HTTP {response.status_code}") return None data = response.json() if data.get("code") != 200: print(f"❌ API 错误: {data.get('message', 'Unknown error')}") return None token = data.get("data", {}).get("token") if not token: print("❌ 响应中没有找到 token") return None print("✅ Token 生成成功!") print("=" * 60) print(f"Token: {token}") print("=" * 60) print("\n请将此 Token 复制到 .env 文件中的 MAIL_CLOUDMAIL_TOKEN") print("\n⚠️ 警告:此 Token 会使之前生成的所有 Token 失效!") return token except httpx.TimeoutException: print("❌ 请求超时,请检查网络连接和 API URL") return None except httpx.NetworkError as e: print(f"❌ 网络错误: {e}") return None except Exception as e: print(f"❌ 发生错误: {e}") return None def main(): print("=" * 60) print("Cloud Mail Token 生成器") print("=" * 60) # 获取用户输入 api_url = input("\n请输入 Cloud Mail API URL (例如 https://mygoband.com): ").strip() if not api_url: print("❌ API URL 不能为空") return admin_email = input("请输入管理员邮箱: ").strip() if not admin_email: print("❌ 管理员邮箱不能为空") return admin_password = getpass.getpass("请输入管理员密码: ") if not admin_password: print("❌ 管理员密码不能为空") return # 生成 Token token = get_cloudmail_token(api_url, admin_email, admin_password) if token: # 询问是否自动更新 .env 文件 update_env = input("\n是否自动更新 .env 文件?(y/N): ").lower() if update_env == 'y': try: import os from pathlib import Path env_file = Path(".env") if env_file.exists(): # 读取现有内容 content = env_file.read_text() # 检查是否已有 MAIL_CLOUDMAIL_TOKEN if "MAIL_CLOUDMAIL_TOKEN" in content: # 替换现有值 import re content = re.sub( r'MAIL_CLOUDMAIL_TOKEN=.*', f'MAIL_CLOUDMAIL_TOKEN={token}', content ) print("✅ 已更新 .env 文件中的 MAIL_CLOUDMAIL_TOKEN") else: # 添加新行 content += f"\nMAIL_CLOUDMAIL_TOKEN={token}\n" print("✅ 已添加 MAIL_CLOUDMAIL_TOKEN 到 .env 文件") # 写回文件 env_file.write_text(content) else: print("⚠️ .env 文件不存在,请手动创建") except Exception as e: print(f"❌ 更新 .env 文件失败: {e}") print("请手动复制 Token 到 .env 文件") if __name__ == "__main__": try: main() except KeyboardInterrupt: print("\n\n⚠️ 操作已取消") except Exception as e: print(f"\n❌ 程序错误: {e}")