【干货】小白也能看懂的自建Cloudflare域名邮箱

教程前的注意事项:

本教程适用于你打算一直使用你的域名邮箱!且自己有能力一直维护自己的邮箱服务!

准备

 

教程开始:

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

打开Clouflare,配置转移域

image

image

image

image

image

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

image

image

image

image

image

image

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

image

image

image

image

image

image

image

image

image

image

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

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

  • xiaohuang@linuxdo.love → xiaohuang@qq.com
  • ilovelinuxdo@linuxdo.love → xiaohuang@qq.com

image

 

看到这里那么恭喜你已经可以正常收邮件了

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

搭建临时邮箱服务

创建D1数据库

image

 

image

打开项目地址,找到db/schema.sql:>直达请点我

image

image

image

image

部署邮箱服务后端

image

image

image

nodejs_compat可以在这里复制!

image

image

>代码直达地址,点我!

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

image

image

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

image

image

image

image

image

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

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

>文档直达

类型 说明
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"}]

 

配置如下:

image

image

一次性可以配置多个哈!

image

image

配置KV缓存

【干货】小白也能看懂的自建Cloudflare域名邮箱

【干货】小白也能看懂的自建Cloudflare域名邮箱

【干货】小白也能看懂的自建Cloudflare域名邮箱

【干货】小白也能看懂的自建Cloudflare域名邮箱

【干货】小白也能看懂的自建Cloudflare域名邮箱

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

image

image

image

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

image

>搭建前端服务,也就是操作界面!>直达地址

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

 

 

 

测试是否正常

image

image

image

image

测试接受邮箱

image

image

image

image

image

调用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("获取验证码失败")

 

 

 

1 搬运工:小职员
2 本站永久网址:http://haifengw.com
3 可能会帮助到你: 使用帮助 | 报毒说明 | 侵权删除 | 联系我们
4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责
5 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新
7 本网站部分资源来源于网络,仅供大家学习与参考,请于下载后24小时内删除
THE END
分享
二维码
海报
【干货】小白也能看懂的自建Cloudflare域名邮箱
教程前的注意事项: 本教程适用于你打算一直使用你的域名邮箱!且自己有能力一直维护自己的邮箱服务! 准备 至少一个域名(哪里的注册商都可以) Cloudflar……
<<上一篇
下一篇>>