【干货】小白也能看懂的自建Cloudflare域名邮箱
教程前的注意事项:
本教程适用于你打算一直使用你的域名邮箱!且自己有能力一直维护自己的邮箱服务!
准备
-
- 至少一个域名(哪里的注册商都可以)
- Cloudflare账号,你可以注册一个,官网:>https://www.cloudflare.com/
教程开始:
第一步,将域名交给Cloudflare托管
打开Clouflare,配置转移域
打开你的域名服务商,这里以我的腾讯为例,其它平台都是同理的
当你完成这一步骤回到Cloudflare继续,一般改过之后需要等一阵子才会生效(大概10分钟)
如果你不需要搭临时邮箱服务,只需要自己的域名邮箱
自此你可以设置成发送到电子邮件,也就是说这个xxx所有的邮件@linuxdo.love
都会转发到你指定的邮箱里去
例如:
- xiaohuang@linuxdo.love → xiaohuang@qq.com
- ilovelinuxdo@linuxdo.love → xiaohuang@qq.com
看到这里那么恭喜你已经可以正常收邮件了
需要继续搭建临时邮箱,请往下看!
搭建临时邮箱服务
创建D1数据库
打开项目地址,找到db/schema.sql:
>直达请点我
部署邮箱服务后端
nodejs_compat
可以在这里复制!
下载代码后,打开代码直接全部复制!
然后我们返回,继续配置D1数据库!
接下来,我们设置环境变量
你可以直接按我给的配置来配,如果你需要额外的配置可以查阅官方文档
值 | 类型 | 值 | 说明 |
---|---|---|---|
ADMIN_PASSWORDS | JSON | [“your_password”,“your_password_two”] | admin 控制台密码, 不配置则不允许访问控制台,大白话:管理员密码不配置你怎么管理?可以多个,你也可以只配置一个! |
ADMIN_USER_ROLE | 纯文本 | admin | admin 角色配置, 如果用户角色等于 ADMIN_USER_ROLE 则可以访问 admin 控制台 大白话:如果角色是admin的用户就可以直接看到admin控制台 |
DEFAULT_DOMAINS | JSON | [“”] 或者 [“各自域名”] | 这里给了一个空数组,也就是说没有登录的用户没有可用的域名,如果你想给没有登录的用户使用域名,你可以加上自己的域名[“各自域名”] 它是一个数组也可以多个 |
DOMAINS | JSON | [“你的域名.love”] | 这里是用来配置你的域名的,例如我的域名就是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 | 纯文本 | 自己去生成一个! | 这里需要一个密钥,打开 class="inline-onebox" rel="noopener nofollow ugc" data-clicks="141" aria-label="GitHub 链接已点击 141 次">GitHub 生成后复制“JWT_SECRET”里的内容 |
NO_LIMIT_SEND_ROLE | 纯文本 | admin | 可以无限发送邮件的角色,我设置成了admin,也就是说admin角色的用户可以无限发送邮件了! |
USER_ROLES | JSON | [{“domains”:[“你的域名.love”],“prefix”:“”,“role”:“vip”},{“domains”:[“你的域名.love”],“prefix”:“”,“role”:“admin”}] 别从这里复制从表格下的代码块复制这个不然报错 | 设置两个系统角色,一个为vip一个为admin! |
[{"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("获取验证码失败")
THE END
0
二维码
海报
【干货】小白也能看懂的自建Cloudflare域名邮箱
教程前的注意事项:
本教程适用于你打算一直使用你的域名邮箱!且自己有能力一直维护自己的邮箱服务!
准备
至少一个域名(哪里的注册商都可以)
Cloudflar……

共有 0 条评论