架构概述
本方案利用 Cloudflare 的 Email Routing(邮件路由) 和 Workers(无服务器函数) 功能,配合 KV 键值对数据库,将个人域名打造成一个“无限容量、全自动”的临时邮箱接码 API。
本接口已开启严格的 API Key 密钥鉴权,完美防御外部恶意调用,专供个人的自动化脚本安全接入。
🛠️第一部分:服务端搭建 (Cloudflare)
1. 准备工作
一个托管在 Cloudflare 的域名:
提示:如果你是为了注册风控严格的平台,尽量避免使用
.top、.xyz、.icu等较为廉价的域名。这些后缀大概率已被全局拉黑。建议使用普通常见的.com、.net、.org域名。
Cloudflare 账号:确保域名 DNS 已完全由 Cloudflare 接管。
2. 开启 Email Routing (邮件路由)
登录 Cloudflare 控制台,进入你的域名管理页面。
在左侧菜单找到 电子邮件 (Email) -> 邮件路由 (Email Routing)。
点击 开始使用 (Get Started),根据提示自动添加必要的 MX 和 TXT 记录。
在“路由规则 (Routing Rules)”页面找到 Catch-all address 备用。
3. 创建 KV 数据库 (用于暂存邮件)
在 Cloudflare 控制台左侧主菜单,点击 Workers 和 Pages -> KV。
点击 创建命名空间 (Create a namespace),命名为
TEMP_MAIL_KV,点击添加。
4. 编写 Worker 核心引擎与配置密钥
在左侧菜单点击 Workers 和 Pages -> 概述 -> 创建应用程序 -> 创建 Worker,命名为
temp-mail-api并部署。进入该 Worker 的设置页面,点击 设置 (Settings) -> 变量和机密 (Variables and Secrets):
绑定 KV:变量名称填写
MAIL_DB,空间选择TEMP_MAIL_KV。设置 API 密钥:添加变量,名称为
API_SECRET_KEY,值填写你自定义的复杂密码(例如:sk-your-super-secret-key-888),务必点击加密 (Encrypt) 并保存。
点击右上角的 编辑代码 (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 });
}
};
点击右上角的 部署 (Deploy) 保存。
5. 绑定路由
回到域名的 电子邮件 (Email) -> 邮件路由 (Email Routing)。
找到 Catch-all address,点击编辑。
操作选择 发送到 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 解码提取验证链接