少女祈祷中...

文章背景图

基于Cloudflare 临时邮箱 API 搭建与调用

2026-03-12
14
-
- 分钟

架构概述

本方案利用 Cloudflare 的 Email Routing(邮件路由)Workers(无服务器函数) 功能,配合 KV 键值对数据库,将个人域名打造成一个“无限容量、全自动”的临时邮箱接码 API。
本接口已开启严格的 API Key 密钥鉴权,完美防御外部恶意调用,专供个人的自动化脚本安全接入。


🛠️第一部分:服务端搭建 (Cloudflare)

1. 准备工作

  • 一个托管在 Cloudflare 的域名

    • 提示:如果你是为了注册风控严格的平台,尽量避免使用 .top.xyz.icu 等较为廉价的域名。这些后缀大概率已被全局拉黑。建议使用普通常见的 .com.net.org 域名。

  • Cloudflare 账号:确保域名 DNS 已完全由 Cloudflare 接管。

2. 开启 Email Routing (邮件路由)

  1. 登录 Cloudflare 控制台,进入你的域名管理页面。

  2. 在左侧菜单找到 电子邮件 (Email) -> 邮件路由 (Email Routing)

  3. 点击 开始使用 (Get Started),根据提示自动添加必要的 MX 和 TXT 记录。

  4. 在“路由规则 (Routing Rules)”页面找到 Catch-all address 备用。

3. 创建 KV 数据库 (用于暂存邮件)

  1. 在 Cloudflare 控制台左侧主菜单,点击 Workers 和 Pages -> KV

  2. 点击 创建命名空间 (Create a namespace),命名为 TEMP_MAIL_KV,点击添加。

4. 编写 Worker 核心引擎与配置密钥

  1. 在左侧菜单点击 Workers 和 Pages -> 概述 -> 创建应用程序 -> 创建 Worker,命名为 temp-mail-api 并部署。

  2. 进入该 Worker 的设置页面,点击 设置 (Settings) -> 变量和机密 (Variables and Secrets)

    • 绑定 KV:变量名称填写 MAIL_DB,空间选择 TEMP_MAIL_KV

    • 设置 API 密钥:添加变量,名称为 API_SECRET_KEY,值填写你自定义的复杂密码(例如:sk-your-super-secret-key-888),务必点击加密 (Encrypt) 并保存。

  3. 点击右上角的 编辑代码 (Edit code),粘贴以下代码:

export default {
  // 1. 处理外部 HTTP API 请求 (Python 脚本需携带 Key 查询邮件)
  async fetch(request, env, ctx) {
    const url = new URL(request.url);
    const path = url.pathname;

    // 路由拦截与鉴权
    if (path === "/api/get_mail" && request.method === "GET") {
      const providedKey = url.searchParams.get("key") || request.headers.get("x-api-key");
      const emailAddress = url.searchParams.get("email");

      // 核心安检:核对 API Key
      if (providedKey !== env.API_SECRET_KEY) {
        return new Response(JSON.stringify({ error: "Unauthorized: Invalid API Key" }), { 
            status: 401, 
            headers: { "Content-Type": "application/json" } 
        });
      }

      if (!emailAddress) {
        return new Response(JSON.stringify({ error: "Missing email parameter" }), { 
            status: 400,
            headers: { "Content-Type": "application/json" } 
        });
      }

      // 鉴权通过,从 KV 读取邮件
      const mailContent = await env.MAIL_DB.get(emailAddress);
      
      if (mailContent) {
        return new Response(mailContent, { status: 200 });
      } else {
        return new Response(JSON.stringify({ error: "No email found or expired" }), { 
            status: 404,
            headers: { "Content-Type": "application/json" } 
        });
      }
    }

    return new Response("Secure Temp Mail API is running!", { status: 200 });
  },

  // 2. 处理 Cloudflare 邮件路由转发过来的邮件
  async email(message, env, ctx) {
    const recipient = message.to;
    const rawEmail = await new Response(message.raw).text();

    // 存入 KV 数据库,键名为收件人邮箱,过期时间设为 10 分钟 (600秒)
    await env.MAIL_DB.put(recipient, rawEmail, { expirationTtl: 600 });
  }
};
  1. 点击右上角的 部署 (Deploy) 保存。

5. 绑定路由

  1. 回到域名的 电子邮件 (Email) -> 邮件路由 (Email Routing)

  2. 找到 Catch-all address,点击编辑。

  3. 操作选择 发送到 Worker (Send to a Worker),目标选择 temp-mail-api 并保存。


第二部分:客户端自动化调用 (Python)

在自动化注册场景中,发送验证码后邮件到达有延迟,因此脚本需要具备鉴权轮询机制。

1. 依赖安装

pip install requests

2. Python 调用脚本范例

将以下代码集成到你的注册机中:

import requests
import time

# ================= 基础配置 =================
API_URL = "https://temp-mail-api.你的前缀.workers.dev/api/get_mail"
API_KEY = "sk-your-super-secret-key-888" # Cloudflare 中配置的加密密钥
TARGET_EMAIL = "test_register_001@你的域名.com"
# ============================================

def wait_for_email(email_address, max_retries=15, wait_seconds=3):
    """
    循环请求 API 获取邮件,直到获取成功或超时。
    """
    print(f"⏳ 开始监听邮箱: {email_address}")
    params = {"email": email_address, "key": API_KEY}

    for attempt in range(1, max_retries + 1):
        try:
            print(f" 第 {attempt} 次尝试获取邮件...")
            response = requests.get(API_URL, params=params, timeout=10)
            
            if response.status_code == 200:
                print("\n 成功获取到邮件!")
                return response.text
            elif response.status_code == 404:
                print(f" 邮件暂未到达,等待 {wait_seconds} 秒后重试...")
            elif response.status_code == 401:
                print("❌ 严重错误:API 密钥不正确,被服务器拒绝访问!")
                return None
            else:
                print(f"⚠️ 发生意外错误,状态码: {response.status_code}")

        except requests.exceptions.RequestException as e:
            print(f" 网络请求异常: {e}")

        time.sleep(wait_seconds)

    print("\n⏰ 监听超时!未能获取到邮件,请检查发送方是否成功发信。")
    return None

if __name__ == "__main__":
    mail_content = wait_for_email(TARGET_EMAIL)
    if mail_content:
        print("\n 邮件原始数据 \n")
        print(mail_content[:500] + "\n... [已截断]")
        #  业务逻辑提示:此处可接入正则匹配或 Base64 解码提取验证链接

上一篇 没有了
下一篇 CPU学习报告
评论交流

文章目录