在cloudflare上搭建临时邮箱服务

简介

CloudFlare 免费临时域名电子邮件 免费收发 临时域名邮箱 支持附件 IMAP SMTP TelegramBot

项目地址:链接直达
参考文档:临时邮箱文档

获取免费的域名

1.获取digitalplat.org(域名获取方法)免费的域名,并且将域名托管到cloudflare平台上。

Cloudflare workers 后端

初始化D1数据库

左侧选择 D1 SQL数据库,点击创建数据库,数据库名称自定义

文件链接:cloudflare_temp_email/db/schema.sql at main · dreamhunter2333/cloudflare_temp_email · GitHub

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
CREATE TABLE IF NOT EXISTS raw_mails (
id INTEGER PRIMARY KEY,
message_id TEXT,
source TEXT,
address TEXT,
raw TEXT,
metadata TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_raw_mails_address ON raw_mails(address);

CREATE INDEX IF NOT EXISTS idx_raw_mails_created_at ON raw_mails(created_at);

CREATE TABLE IF NOT EXISTS address (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE,
password TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_address_name ON address(name);

CREATE INDEX IF NOT EXISTS idx_address_created_at ON address(created_at);

CREATE INDEX IF NOT EXISTS idx_address_updated_at ON address(updated_at);

CREATE TABLE IF NOT EXISTS auto_reply_mails (
id INTEGER PRIMARY KEY,
source_prefix TEXT,
name TEXT,
address TEXT UNIQUE,
subject TEXT,
message TEXT,
enabled INTEGER DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_auto_reply_mails_address ON auto_reply_mails(address);

CREATE TABLE IF NOT EXISTS address_sender (
id INTEGER PRIMARY KEY,
address TEXT UNIQUE,
balance INTEGER DEFAULT 0,
enabled INTEGER DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_address_sender_address ON address_sender(address);

CREATE TABLE IF NOT EXISTS sendbox (
id INTEGER PRIMARY KEY,
address TEXT,
raw TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_sendbox_address ON sendbox(address);

CREATE INDEX IF NOT EXISTS idx_sendbox_created_at ON sendbox(created_at);

CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY,
value TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
user_email TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
user_info TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_users_user_email ON users(user_email);

CREATE TABLE IF NOT EXISTS users_address (
id INTEGER PRIMARY KEY,
user_id INTEGER,
address_id INTEGER UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_users_address_user_id ON users_address(user_id);

CREATE INDEX IF NOT EXISTS idx_users_address_address_id ON users_address(address_id);

CREATE TABLE IF NOT EXISTS user_roles (
id INTEGER PRIMARY KEY,
user_id INTEGER UNIQUE NOT NULL,
role_text TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_user_roles_user_id ON user_roles(user_id);

CREATE TABLE IF NOT EXISTS user_passkeys (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
passkey_name TEXT NOT NULL,
passkey_id TEXT NOT NULL,
passkey TEXT NOT NULL,
counter INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_user_passkeys_user_id ON user_passkeys(user_id);

CREATE UNIQUE INDEX IF NOT EXISTS idx_user_passkeys_user_id_passkey_id ON user_passkeys(user_id, passkey_id);

复制粘贴一下sql语句,然后点击创建数据表的按钮。

创建Workers的API

计算机和AI–选择Workers和pages—点击创建应用程序—如下图选择—-点击部署

设置兼容性标志:nodejs_compat

在github项目的releases里下载worker.js,将文件内容复制粘贴一下,然后点击部署(如果无法部署,先设置兼容性标记

绑定D1数据

变量名称填写DB,然后选择我们刚才创建的D1数据库。

绑定域名

域和路由添加

这时候使用域名访问会出现如下信息的提示

1
JWT_SECRET is not set, please contact the administrator

必填变量

域名

变量名 类型 说明 示例
DOMAINS JSON 用于临时邮箱的所有域名, 支持多个域名 [“awsl.uk”, “dreamhunter2333.xyz”]

JWT_SECRET生成

JWT_SECRET密钥生成

变量名 类型 说明 示例
JWT_SECRET 文本/Secret 用于生成 jwt 的密钥, jwt 用于登录以及鉴权 xxx

admin 控制台

变量名 类型 说明 示例
ADMIN_PASSWORDS JSON admin 控制台密码, 不配置则不允许访问控制台 [“123”, “456”]
ENABLE_USER_CREATE_EMAIL 文本/JSON 是否允许用户创建邮箱, 不配置则不允许 true
ENABLE_USER_DELETE_EMAIL 文本/JSON 是否允许用户删除邮件, 不配置则不允许 true

绑定KV

如果你要启用注册用户功能,并需要发送邮件验证,则需要创建 KV 缓存

创建KV

绑定KV,变量名称KV

电子邮件路由配置

点击开始使用

启用电子邮箱路由

点击添加记录并启用

开启Catch-All,点击编辑

设置目的地址为我们刚才创建的worker项目。

这时候使用设置的域名访问会出现

1
ok

Cloudflare Pages 前端

Cloudflare Pages 前端 | 临时邮箱文档

输入访问的域名生成前端的代码。下载压缩包

点击get started按钮

选择拖放文件选项

自定义项目名称,将下载的压缩包上传。

设置自定义域名

食用

点击邮箱图标6次,然后输入设置的密码

使用 resend 发送邮件

  1. 注册 https://resend.com/domains 网站的账号
  2. API KEYS 页面创建 api key
  3. 在cloudflare上添加resend网站的 DNS 记录
  4. 在 Cloudflare 的 UI 界面中 Variables and Secrets 下面,变量类型选择机密变量名称 RESEND_TOKEN ,然后APIkEY的值添加一下。

还是无法发送邮件


在cloudflare上搭建临时邮箱服务
https://skilladd.org/2025/12/12/42.在cloudflare上搭建临时邮箱服务/
Author
skilladd
Posted on
December 12, 2025
Licensed under