PW0N's Blog

分享更多的技术让志同道合的一起学习交流

0%

用域名和cloudflare创建无限邮箱

准备

  • 域名: 你需要一个已经拥有的域名。
  • Cloudflare 账号: 如果没有,请前往 Cloudflare 官网 注册一个。
  • 官方文档: https://temp-mail-docs.awsl.uk/
  • 域名接入 Cloudflare: 如果你还不清楚如何将域名接入 Cloudflare,请参考这篇教程: 点击这里 (请注意,此链接可能需要替换为实际可用的教程链接)

Cloudflare 电子邮件设置

  1. 开始使用电子邮件路由: 在 Cloudflare 控制台中,找到你的域名,点击 电子邮件,然后选择 电子邮件路由 开始使用。
  2. 自定义域名前缀和验证邮箱:
    • 为你的域名设置一个前缀。
    • 在下方输入你的真实邮箱地址(QQ 邮箱或 163 邮箱等,确保能接收到邮件)。
    • 点击 验证邮箱
  3. 验证邮箱: 前往你填写的邮箱,找到 Cloudflare 发来的邮件,点击邮件中的链接完成验证。
  4. 启用电子邮件路由: 返回 Cloudflare,点击 继续,在电子邮件路由入门指南页面,点击 添加记录并启用
  5. 编辑路由规则: 点击 编辑,打开 状态,然后点击 路由规则

创建 D1 数据库

  1. 进入 D1 数据库: 在 Cloudflare 主页,点击 存储和数据库,然后选择 D1 SQL 数据库
  2. 创建数据库: 点击 创建,输入一个你喜欢的名字,然后点击 创建
  3. 执行 SQL 脚本:
    • 复制以下 SQL 代码:
      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
      CREATE TABLE IF NOT EXISTS raw_mails (
      id INTEGER PRIMARY KEY,
      message_id TEXT,
      source TEXT,
      address TEXT,
      raw TEXT,
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP
      );

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

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

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

      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 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);
    • 在 D1 数据库的 控制台 中,将代码粘贴到输入框中。
    • 点击 执行

部署 Worker

  1. 创建 Worker: 在 Cloudflare 主页,点击 Workers 和 Pages,然后选择 创建 Worker

  2. 命名 Worker: 随意给你的 Worker 起一个名字,然后点击 部署

  3. 设置兼容性标志:

    • 找到你刚才部署的 Worker,点击进入。
    • 点击 设置,找到 兼容性标志
    • 点击编辑标志,输入 nodejs_compat
  4. 编辑代码:

    • 点击 编辑代码

    • 下载 worker.js 代码:worker.js

    • 将下载的代码复制粘贴到代码编辑器中,然后点击 部署

  5. 绑定 D1 数据库:

    • 返回 Worker 设置页面。
    • 点击 D1 数据库,然后选择 绑定
    • 变量名称 中输入 DB
    • D1 数据库 中选择你创建的数据库。
  6. 设置自定义域:

    • 域和路由 中选择 自定义域
    • 输入你想要的 API 域名 (例如 api.你的域名.com)。
  7. 配置环境变量:

    • 在 Worker 设置页面,找到 环境变量
    • 根据下表配置环境变量:
    类型 说明
    ADMIN_PASSWORDS JSON ["your_password", "your_password_two"] admin 控制台密码,不配置则不允许访问控制台。可以配置多个密码,也可以只配置一个。
    ADMIN_USER_ROLE 纯文本 admin admin 角色配置,只有用户角色等于 ADMIN_USER_ROLE 的用户才能访问 admin 控制台。
    DEFAULT_DOMAINS JSON [""] 未登录用户可用的域名列表,默认为空。如果你想让未登录用户也可以使用域名,可以添加你的域名,例如 ["你的域名.com"],可以添加多个域名。
    DOMAINS JSON ["你的域名.com"] 用于配置你的域名,例如 ["你的域名.com"],请确保配置的域名已经接入 Cloudflare。
    ENABLE_AUTO_REPLY 纯文本 false 是否允许自动回复邮件,默认 false
    ENABLE_USER_CREATE_EMAIL 纯文本 true 是否允许用户随机创建邮箱账户,默认 true
    ENABLE_USER_DELETE_EMAIL 纯文本 true 是否允许用户删除邮件,默认 true。设置为 false 则不允许用户删除邮件。
    JWT_SECRET 纯文本 自己生成一个 用于生成 JWT 的密钥,前往 https://www.librechat.ai/toolkit/creds_generator 生成并复制 JWT_SECRET 的值。
    NO_LIMIT_SEND_ROLE 纯文本 admin 可以无限发送邮件的角色,设置为 admin 则只有 admin 角色的用户可以无限发送邮件。
    USER_ROLES JSON [{"domains":["xx.com"],"prefix":"","role":"vip"},{"domains":["xx.com"],"prefix":"","role":"admin"}] 设置系统角色,示例中创建了 vipadmin 两个角色。请从这里复制,避免格式错误。
    RESEND_TOKEN 纯文本 re_xxxx https://resend.com 注册并添加域名获取 api 秘钥填写,用来发送邮件,可自己选择。

部署 KV 缓存

  1. 创建 KV 命名空间: 在 Cloudflare 主页,点击 存储和数据库,然后选择 KV
  2. 创建命名空间: 点击 创建,随意输入一个名字,然后点击 添加
  3. 绑定 KV 命名空间:
    • 返回 Workers 和 Pages,找到你创建的 Worker。
    • 点击 设置,然后选择 绑定
    • 点击 KV 命名空间,在 变量名称 中输入 KV(注意大写)。
    • 命名空间 中选择你创建的 KV 命名空间。

部署路由转发

  1. 进入电子邮件路由: 在 Cloudflare 主页,点击你的域名,然后选择 电子邮件,再选择 电子邮件路由
  2. 编辑路由规则:
    • 找到 路由规则 部分,点击 catch-all 规则。
    • 操作 中选择 发送到 Workers
    • 编辑位置 中选择你创建的 Worker。
    • 点击 保存

创建页面前端

  1. 下载前端代码: 前端代码

  2. 解压前端代码: 解压下载的 frontend.zip 文件。

  3. 编辑 index 文件:

    • 打开解压后的文件夹,进入 assets 文件夹。
    • 找到 index-xxxx 文件 (xxxx 是随机数,每个人不一样),使用文本编辑器打开。
    • 按下 Ctrl + F (或 Cmd + F),搜索 https://temp-email-aps-
    • 将找到的链接替换成你刚刚创建的 API 域名 (例如 https://api.你的域名.com),保存文件。
  4. 创建 Pages 项目:

    • 在 Cloudflare 主页,点击 Workers 和 Pages,然后选择 Pages
    • 点击 创建项目,然后选择 上传资产
    • 随便起一个项目名,然后点击 从计算机选择
  5. 上传前端代码: 选择你解压的文件夹,将所有文件上传。

  6. 设置自定义域:

    • 点击 自定义域,将你的邮箱前端域名指向 Pages 项目 (例如 mail.你的域名.com)。
  7. 访问前端: 等待几分钟,然后在浏览器中输入 mail.你的域名.com,查看是否成功部署。

完成

恭喜!你已经成功搭建了一个基于 Cloudflare 的无限邮箱服务。

注意:

  • 请将示例中的 “你的域名.com”、”api.你的域名.com” 和 “mail.你的域名.com” 替换成你自己的实际域名。
  • 请确保你的域名已经正确接入 Cloudflare。

希望这个教程对你有帮助!

Link
Plus
Share
Class
Send
Send
Pin