【教程】小白也能看懂的自建Cloudflare临时邮箱教程(域名邮箱)

此版本为2024年12月旧版本教程,请参照2026年新版本

教程翻新版本:

写在前面

我一开始也没怎么用过Cloudflare,就最早的时候是用它来部署过Openai的接口中转,防止被墙(已经是很早很早之前的事情了,已经失效了),然后呢那天我打开cloudflare临时邮箱项目的官方教程文档,给我搞的一脸懵的,不过好在最后是成功搭建好了!写这个教程,也是为了帮助那些想搭,但是弄不明白的佬友,希望可以帮到你!

注意

此为临时邮箱,如果你需要注册自己觉得比较重要的平台且账号数据需要保留的情况下,请不要使用临时邮箱注册!!! 除非你打算一直使用你的域名邮箱!且自己有能力一直维护自己的邮箱服务!

我为什么想搭临时邮箱?

起初是一天晚上,半夜没睡着,然后不知道抽什么风,就想去域名注册看看,看能不能弄个好看点的域名,然后我试啊试,最终注册了一个goai.love,我想着不浪费的情况下,用它来做点什么,于是首先想到的就是搭建临时邮箱供给自己的朋友们一起使用,对打算搭个私有的临时邮箱

临时邮箱有什么好处?

我们知道,很多平台注册都会使用到邮箱,我们见过的常用邮箱有 gmailqq163等,一般会给一个固定的前缀,例如[email protected],这时,你会发现注册cursoropenaiclaude你只能用一个邮箱来注册,无法多次注册!说人话就是方便你可以无限注册薅羊毛(当然我也知道gmail可以有特殊的办法使它前缀不一致发送给同一个邮箱,我没试过就不说啦)

什么是临时邮箱?

标题上已经写了,它其实就是域名邮箱,只是我们用到的这个项目取名叫做临时邮箱,它是通过你自己购买的域名来在Cloudflare上搭建一个邮箱服务来实现的,所以你也可以叫它自建域名邮箱

准备

关于域名

  • 你可以寻找便宜的服务商去注册,我一般会在阿里云、腾讯云买域名,比如我为了写教程就买了一个linuxdo.love
  • 如果你想便宜,那就用不常见的后缀且域名前缀给长一点,不要学我,我这个域名续费180一年,18首年!
  • 在买域名的时候,你可以注意一下之后续费是多少钱一年,如果看不到,你可以尝试把1年加到2年一般就可以看到之后续费的价格了

项目原作者

第一步,将域名交给Cloudflare托管

打开Clouflare,配置转移域





打开域名服务商,这里以我的腾讯为例,其它平台都是同理的






回到Cloudflare继续,一般改过之后需要等一阵子才会生效(大概10分钟)









如果你不需要搭临时邮箱服务,只需要自己的域名邮箱

自此你可以设置成发送到电子邮件,也就是说这个xxx所有的邮件@linuxdo.love都会转发到你指定的邮箱里去
例如:

如果你需要继续搭建临时邮箱,请往下看!

搭建临时邮箱服务

创建D1数据库


打开项目地址,找到db/schema.sql

直达请点我




部署邮箱服务后端



nodejs_compat可以在这里复制!


代码直达地址,点我!

下载代码后,打开代码直接全部复制!


然后我们返回,继续配置D1数据库!





接下来,我们设置环境变量

你可以直接按我给的配置来配,如果你需要额外的配置可以查阅官方文档

文档直达

注意:请不要从表格里直接复制配置,你可以下拉到表格下方去复制,表格内的引号会自动将英文的转成中文的,所以请去下面代码块内复制! :tieba_087:

请仔细查看参数说明,不要直接复制就不管了

类型 说明
ADMIN_PASSWORDS JSON [“”,“设置密码”] admin 控制台密码, 不配置则不允许访问控制台,大白话:管理员密码不配置你怎么管理?可以多个,你也可以只配置一个!
ADMIN_USER_ROLE 纯文本 admin admin 角色配置, 如果用户角色等于 ADMIN_USER_ROLE 则可以访问 admin 控制台 大白话:如果角色是admin的用户就可以直接看到admin控制台
DEFAULT_DOMAINS JSON [“”] 或者 [“你的域名”] 这里给了一个空数组,也就是说没有登录的用户没有可用的域名,如果你想给没有登录的用户使用域名,你可以加上自己的域名[“各自域名”] 它是一个数组也可以多个
DOMAINS JSON [“你的域名”] 这里是用来配置你的域名的,例如我的域名就是linuxdo.love,实际上还可以添加多个,例如[“linuxdo.love”,“goai.love”],当然配置的域名都得接入cloudflare哈!没接入你配了也没用!
ENABLE_AUTO_REPLY 纯文本 false 是否允许自动回复邮件,官方默认是false,我们也设置为false
ENABLE_USER_CREATE_EMAIL 纯文本 true 是否允许用户随机创建邮箱账户,默认为true就行,这样就可以创建不同的邮件账户啦!
ENABLE_USER_DELETE_EMAIL 纯文本 true 是否允许用户删除邮件,如果你不想用户删除邮件改成false就行
JWT_SECRET 纯文本 密钥 这里需要一个密钥,打开Credentials Generator | LibreChat 生成后复制“JWT_SECRET”里的内容
NO_LIMIT_SEND_ROLE 纯文本 admin 可以无限发送邮件的角色,我设置成了admin,也就是说admin角色的用户可以无限发送邮件了!
USER_ROLES JSON [{“domains”:[“你的域名”],“prefix”:“”,“role”:“vip”},{“domains”:[“你的域名”],“prefix”:“”,“role”:“admin”}] 设置两个系统角色,一个为vip一个为admin!
ENABLE_ADDRESS_PASSWORD 纯文本 true 启用邮箱地址密码功能,启用后创建新地址时会自动生成密码,并支持密码登录和修改

ADMIN_PASSWORDS

["your_password","your_password_two"]

DEFAULT_DOMAINS

[""]
["你自己的域名"]

DOMAINS

["你的域名.love"]

USER_ROLES

[{"domains":["你的域名.love"],"prefix":"","role":"vip"},{"domains":["你的域名.love"],"prefix":"","role":"admin"}]

如何配置?看图


一次性可以配置多个哈!


配置KV缓存






配置邮件转发【非常重要,必须配置】



自此!恭喜你!临时邮箱后端服务搭建完成!

搭建前端服务,也就是操作界面!

我们需要生成前端代码,打开官方文档,一个生成器!

直达地址

【注意】这里图片里打错字了,图片里说的是“自定义域”,我打成了“兹定于”









也许也不需要等十分钟,你可以用无痕浏览器,或者别的浏览器访问一下,看是否可以访问了!

测试是否正常

创建用户




测试接收邮件





调用API创建邮件获取邮件(请根据实际情况去修改代码!这是之前测试用的代码!)

import requests
import json
from time import sleep
import random
import string
import re

# 配置信息
WORKER_DOMAIN = ""  # 替换为你的后台域名,比如我的,apimail.linuxdo.love
EMAIL_DOMAIN = "" # 你的域名地址
ADMIN_PASSWORD = "" # 你的管理员密码

def generate_random_name():
    """生成随机邮箱名称"""
    letters1 = ''.join(random.choices(string.ascii_lowercase, k=5))  # 5个小写字母
    numbers = ''.join(random.choices(string.digits, k=random.randint(1, 3)))  # 1-3个数字
    letters2 = ''.join(random.choices(string.ascii_lowercase, k=random.randint(1, 3)))  # 1-3个小写字母
    return letters1 + numbers + letters2

def create_test_email():
    """创建测试邮箱"""
    try:
        random_name = generate_random_name()
        res = requests.post(
            f"https://{WORKER_DOMAIN}/admin/new_address",
            json={
                "enablePrefix": True,
                "name": random_name,
                "domain": EMAIL_DOMAIN,
            },
            headers={
                'x-admin-auth': ADMIN_PASSWORD,
                "Content-Type": "application/json"
            }
        )
        
        if res.status_code == 200:
            data = res.json()
            print("创建邮箱成功:")
            print(f"JWT: {data.get('jwt')}")
            print(f"邮箱地址: {data.get('address')}")
            return data.get('jwt'), data.get('address')
        else:
            print(f"创建邮箱失败: {res.status_code}")
            return None, None
    except Exception as e:
        print(f"创建邮箱出错: {e}")
        return None, None

def check_verification_code(jwt):
    """查看验证码"""
    try:
        limit = 10
        offset = 0
        res = requests.get(
            f"https://{WORKER_DOMAIN}/api/mails",
            params={
                "limit": limit,
                "offset": offset
            },
            headers={
                "Authorization": f"Bearer {jwt}",
                "Content-Type": "application/json"
            }
        )
        
        if res.status_code == 200:
            data = res.json()
            # print("\n收到的邮件:")
            # print(json.dumps(data, indent=2))
            
            # 使用正则表达式提取验证码
            if data.get('results') and len(data['results']) > 0:
                raw_content = data['results'][0].get('raw', '')  # 获取最新邮件的raw内容
                # 使用更简单的正则表达式,直接匹配数字
                code_matches = re.findall(r'code is: (\d{6})', raw_content)
                if code_matches:
                    verification_code = code_matches[0]  # 获取第一个匹配的6位数字
                    print(f"\n提取到的验证码: {verification_code}")
                    return True, verification_code
                else:
                    # 尝试另一种匹配方式
                    code_matches = re.findall(r'code is:\s*(\d{6})', raw_content)
                    if code_matches:
                        verification_code = code_matches[0]
                        print(f"\n提取到的验证码: {verification_code}")
                        return True, verification_code
                    print("未找到验证码")
                    return False, None
            else:
                print("邮件列表为空")
                return False, None
        else:
            print(f"获取邮件失败: {res.status_code}")
            return False, None
            
    except Exception as e:
        print(f"获取邮件出错: {e}")
        return False, None

def main():
    # 1. 创建测试邮箱
    jwt, address = create_test_email()
    if not jwt or not address:
        print("无法继续测试")
        return
        
    print("\n创建的邮箱信息:")
    print(f"JWT: {jwt}")
    print(f"邮箱地址: {address}")
        
    # 2. 等待一会儿,让邮件有时间送达
    print("\n等待10秒钟让邮件送达...")
    sleep(10)
    
    # 3. 查看验证码
    success, code = check_verification_code(jwt)
    if success:
        print(f"成功获取验证码: {code}")
    else:
        print("获取验证码失败")

关于发送邮件

由于我一直在弄自己的学习,然后平常也就上L站看看,一直没有空写发邮件的教程,今天看到有佬友写了一篇有关发送邮件的配置,贴在这里哈!感谢佬友的教程!

另外一个佬友写的发送邮件教程

另类方式实现自有域名无限收码(只能收不能发,发还是得依靠resend之类第三方)

如果你有自己的域名,你只是为了接收邮件,有个更简单的方式,使用cloudflare的 Email Routing 即可。
如图,选择你托管在cf上的域名,然后点击这个


然后 (有冲突的地方记得删掉)

然后到这地方设置下全转发,把你域名下的所有邮件统一转到你私有的某个邮箱。

然后你就拥有无限多的邮箱来收验证码了。
即任何发往这个域名的邮件都会转到你设置的那个私有邮箱中。
举例 “xx@域名 admin@域名”…… 最终都会被cf大善人给你转发到你设置的那个邮箱中。
设置完了记得启用下。

问题收集

关于刷新后404问题

结束

啊,从21点写到现在01点03分,终于写完了,希望能帮到佬友,发送邮件我就不写了,需要的可以去看看官方文档,第一次写教程,如果有错误或者欠缺的地方,欢迎佬友们补充!我去睡觉了!我还说我调整作息呢…又熬到1点了
访问地址:https://mail.linuxdo.love/

最后接好运

昨天中了40 5块钱中了40块钱!自己买疯狂星期四! - #6,来自 XiaoHuang
今天中了50

为什么我的Cloudflare里面没有D1数据库

祝佬友们也好运连连!

本教程允许搬运,但请标注出处,谢谢

1558 个赞
不是?我真服了CSDN了,光速搬我辛苦写的教程是吧....(吐槽一下)
关于自建邮箱
书接上回——如何让你的CF临时邮箱可以发邮件😁
大家都是从哪里获得很多的稳定邮箱账号的
已解决,cloudflare
建立自己的域名邮箱系统
cloudflare 部署 临时邮箱 遇见错误
根据开源项目,做了一个临时邮箱服务
【教程】2026版 小白也能看懂的自建Cloudflare临时邮箱教程(域名邮箱)
Cursor续杯失败,求指路
纯小白2小时配置CF域名邮箱的经验,你会遇到的常见简单误区指南
各位佬请问有了自己的域名怎么建邮局啊(小白不会求指教
十分钟拥有自己的无限域名邮箱
求佬帮忙解决一个cloudfare配合域名生成邮箱的问题
跟着教程搭建了一个域名邮箱 给大家使用
cf临时邮箱这个worker的请求数正常吗
怎么在cfmail用二级域名
自建邮局系统?
有啥域名邮箱推荐的吗?
哪位大哥知道域名邮箱哪个比较好
【长期帖】来推荐你心目中的精华神帖吧
关于自建邮箱
CloudFlare临时邮箱怎么2api
再抽一个Jetbrains教育版
用codex做了个小玩具,用于同步Gemini Business2api,实现自动创建和更新保活(调试中)
LINUX DO 2025 年度回顾
【教程】2026版 小白也能看懂的自建Cloudflare临时邮箱教程(域名邮箱)
佬们,CF邮箱发邮件能进Gmaill,但被QQ邮箱扔垃圾箱,怎么改善?
【已解决】cloudflare 使用问题
自建Cloudflare临时邮箱教程遇到的问题和解决方案
求助, 自己的域名搭建邮箱,收信稳定吗
【注册机失效】从 cf邮箱到注册机到 sub2api,完整流程搭建属于你的公益站(自用站)

事无巨细,赞了

32 个赞

感谢分享有时间试试

22 个赞

实在太棒了,:+1:给了

24 个赞

好强啊,感谢分享~

21 个赞

很细,感谢佬友

21 个赞

我靠!这个教程也太长长长长了!!!!

25 个赞

:tieba_087: 写给小白的,不得细点!

23 个赞

太详细了,太适合新手了

22 个赞

太强了,感谢佬的精心制作分享

21 个赞

这个手把手教学写起来很费时间,谢谢分享

25 个赞

这也太细了吧 :+1:

我直接 catch all 转 duck 再转飞书。

26 个赞

整挺好!! :tieba_087:

26 个赞

太细心啦tieba_013

20 个赞

很吊,很详细,收藏了

20 个赞

太详细了老友

21 个赞

学了。感谢大佬

21 个赞

教程很好很细,为了写教程专门买域名,大受震撼!赞赞支持!

22 个赞

刚刚好之前建这个一直失败)
谢谢啦

19 个赞

祝佬友发大财

18 个赞