本方案通过 Cloudflare Worker + KV 存储,将 OpenAI 的注册验证码自动提取并伪装成标准的 Inbucket API 格式,供注册脚本调用。

第一步:配置 KV 存储

KV 用于临时存放从邮件中提取的验证码。

登录 Cloudflare 控制台。

进入 存储与数据库 (Storage & Databases) -> KV。

点击 创建命名空间 (Create Namespace)。

名字建议设为 OAI\_MAIL。

第二步:部署邮件处理 Worker

创建一个 Worker 来处理邮件接收逻辑与脚本的查询请求。

创建一个新的 Worker(例如命名为 mail-handler)。

粘贴以下完整代码:

export default {
  // 1. 处理接收到的邮件 (Email Routing)
  async email(message, env, ctx) {
    const reader = message.raw.getReader();
    const decoder = new TextDecoder("utf-8");
    let rawEmail = "";
    while (true) {
      const { done, value } = await reader.read();
      if (done) break;
      rawEmail += decoder.decode(value, { stream: true });
    }

    const recipient = message.to; 
    
    // 正则提取 6 位验证码
    const codeMatch = rawEmail.match(/(?<!\d)(\d{6})(?!\d)/);
    
    if (codeMatch) {
      const code = codeMatch[1];
      // 将验证码存入 KV,过期时间设为 10 分钟 (600秒)
      await env.OAI_MAIL.put(recipient, code, { expirationTtl: 600 });
      console.log(`[Email] 已保存验证码: ${code} 到邮箱: ${recipient}`);
    }
  },

  // 2. 处理脚本的 HTTP 查询请求 (fetch)
  async fetch(request, env) {
    const url = new URL(request.url);
    const path = url.pathname;
    
    // 从 /api/v1/mailbox/{identifier} 中提取 identifier
    let identifier = path.split('/').pop();

    // 过滤掉无效请求
    if (!identifier || identifier === 'v1' || identifier === 'mailbox') {
       return new Response("[]", { headers: { "Content-Type": "application/json" } });
    }

    // --- 核心查找逻辑 ---
    let code = await env.OAI_MAIL.get(identifier);
    if (!code && !identifier.includes('@')) {
      // 如果脚本查询时不带后缀,自动补全域名后缀去 KV 查找 (请确保与 pool_config.yaml 一致)
      code = await env.OAI_MAIL.get(`${identifier}@311234.xyz`);
    }

    if (code) {
      const now = Date.now();
      // 构造脚本 codex_reg_and_login.py 能够 100% 识别的 JSON 结构
      const result = {
        "id": "cf-" + now,
        "posix-millis": now,              // 脚本用于排序最新邮件
        "from": "no-reply@openai.com",
        "subject": `OpenAI Verification Code ${code}`, // 主题必须含 openai 关键词
        "date": new Date().toISOString(),
        "body": { 
          "text": `Your OpenAI code is ${code}`, 
          "html": `Code: <b>${code}</b>` 
        },
        "text": `${code}`
      };

      return new Response(JSON.stringify([result]), { 
        headers: { 
          "Content-Type": "application/json; charset=utf-8",
          "Access-Control-Allow-Origin": "*" 
        } 
      });
    }
    
    return new Response("[]", { 
      headers: { 
        "Content-Type": "application/json",
        "Access-Control-Allow-Origin": "*" 
      } 
    });
  }
};

关键配置(必做):

在 Worker 的 绑定 中 找到 KV 命名空间绑定 (KV Namespace Bindings) 添加绑定。

添加绑定:变量名称 必须填 OAI\_MAIL,KV 命名空间 选择你刚才创建的 OAI\_MAIL。

第三步:设置邮件路由

将所有发往您域名的邮件转发给该 Worker 处理。

进入 Cloudflare 菜单中的 电子邮件 (Email) -> 电子邮件路由 (Email Routing)。

进入 路由规则 (Routing Rules) 标签页。

在 Catch-all address 部分,点击 编辑 (Edit):

状态 (Status): 已启用 (Enabled)。

操作 (Action): 发送到 Worker (Send to Worker)。

目的地 (Destination): 选择您刚才创建的 mail-handler。

第四步:修改脚本配置 pool\_config.yaml

调整本地脚本设置,确保生成的邮箱域名与接收地址匹配。


email_domains:
  - "example.com"

# 2. 接口配置:将 Worker 的访问地址填入 mail_api
# 注意:结尾不要加斜杠
mail_api: "https://mail-handler.your-subdomain.workers.dev"

标签: cloudflare, openai, worker, kv存储, 邮箱

添加新评论