通过cloudflare_temp_email结合cloudflare部署临时邮箱服务

效果预览

图片[1]-通过cloudflare_temp_email结合cloudflare部署临时邮箱服务
图片[2]-通过cloudflare_temp_email结合cloudflare部署临时邮箱服务

安装过程

首先要定义两个域名:

  • 前端 URL: xxxemail.pro4u.cyou
  • 后端 URL: xxxxhemail.pro4u.cyou

1. 数据库设置

  1. WorksPages 中选择 D1 数据库
  2. 创建数据库,命名为 dev
  3. 进入 dev 数据库,打开 Console 标签。
  4. 复制 schema.sql 文件中的内容到 Console 中,并点击 Execute 按钮。
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,
    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);

数据库创建完成。

2. 后台程序部署

  1. WorksPages 中创建应用程序,选择 Workers
  2. 起名字为 cfmail-api,保存并点击右下角的 完成
  3. 点击界面右上角的 Edit Code
  4. 在左边点击文件按钮,右键点击 works.js,选择删除
  5. 下载 works.js 文件,右键点击并选择上传,将下载的文件上传。
  6. 点击右上角的 部署

接下来,来到项目的 Settings -> Variables 中,添加以下变量:

  • ADMIN_PASSWORDS = ["1234"] 后台管理员登录密码
  • PASSWORDS = ["1234"] 前端用户访问密码
  • DOMAINS = ["pro4u.cyou"] 需要配置的域名
  • JWT_SECRET = ["xxxyyyzzz"] 一个jwt效验,随便填即可

KV Namespace Bindings 中添加一个 KV:

  1. 创建一个 KV,命名为 dev
  2. Variable name 填写 KV(大写)。
  3. KV Namespace 选择创建的 KV 库 dev。在创建的Works的设置页面

添加 D1 数据库:

  1. Settings -> Variables 中,找到 D1 Database,添加上一步创建的数据库 dev。在Works的设置页面
  2. 最后进行一次部署。这一点是经常出错的地方,每次修改都要重新部署才能生效。

后端验证

后端设置完成后,通过访问后端域名及目录进行验证。例如:

  • xxxemail.pro4u.cyou 返回结果 OK
  • xxxhemail.pro4u.cyou 返回结果 OK

若返回上述结果,说明后端配置完成,后期可随时在变量中增删内容以达到配置效果。

3. 前台程序部署

  1. WorksPages 中创建应用程序,选择 Pages
  2. 选择 Create using direct upload,然后点击 Upload assets
  3. 访问 官方文档 生成配置文件。
  4. 在地址栏输入后端的 HTTPS 地址(如 https://xxxhemail.pro4u.cyou),生成配置,下载 frontend.zip 文件并上传到 Pages
图片[3]-通过cloudflare_temp_email结合cloudflare部署临时邮箱服务

最后,在 Custom Domain 中为前端自定义一个域名,例如 xxxemail.pro4u.cyou。前端验证时,访问 https://xxxemail.pro4u.cyou,此时应该出现界面并提示输入密码。

4. 邮件路由设置

  1. 登录到 Cloudflare 控制面板,选择需要使用的域名。
  2. 左边选择 Email 菜单,在 Email Routing 中选择 Routing rules,激活 Catch-all address 并点击 Edit
  3. 选择 Send to a Worker,目标选择后端的 Worker 名字。

截止到现在,登录前端 URL 已经可以使用。

5. 发送邮件设置

  1. Resend 的Domains进行域名验证。根据提示为当前临时邮箱使用的域名添加mx、txt等记录值
  2. API-Key 中创建一个 API,赋予全部权限,复制生成的密码。
  3. 在后端的 Worker 中 Settings -> Environment Variables 中添加变量:
    • RESEND_TOKEN = (上一步复制的密码)

截止到以上步骤,即可完整收发邮件。

6. Telegram 机器人(可选)

  1. 创建 Telegram 机器人(具体方法可自行搜索)。
  2. 拿到用于此项目的机器人 Token 和 Telegram 账户 ID。
  3. 在后端的 Worker 中 Settings -> Environment Variables 中添加变量:
    • TELEGRAM_BOT_TOKEN = 机器人 token
  4. 在前端管理员后台配置 Telegram账户的 ID即可。

如需在收到邮件时推送到 Telegram,可以修改后端相关代码。

其余可选变量:

[vars]
# TITLE = "Custom Title" # 自定义网站标题
PREFIX = "tmp" # 要处理的邮箱名称前缀,不需要后缀可配置为空字符串
# 如果你想要你的网站私有,取消下面的注释,并修改密码
# PASSWORDS = ["123", "456"]
# admin 控制台密码, 不配置则不允许访问控制台
# ADMIN_PASSWORDS = ["123", "456"]
# admin 联系方式,不配置则不显示,可配置任意字符串
# ADMIN_CONTACT = "xx@xx.xxx"
DOMAINS = ["xxx.xxx1" , "xxx.xxx2"] # 你的域名, 支持多个域名
JWT_SECRET = "xxx" # 用于生成 jwt 的密钥, jwt 用于给用户登录以及鉴权
BLACK_LIST = "" # 黑名单,用于过滤发件人,逗号分隔
# 是否允许用户创建邮件, 不配置则不允许
ENABLE_USER_CREATE_EMAIL = true
# 允许用户删除邮件, 不配置则不允许
ENABLE_USER_DELETE_EMAIL = true
# 允许自动回复邮件
ENABLE_AUTO_REPLY = false
# 是否启用 webhook
# ENABLE_WEBHOOK = true
# 前端界面页脚文本
# COPYRIGHT = "Dream Hunter"
# 默认发送邮件余额,如果不设置,将为 0
# DEFAULT_SEND_BALANCE = 1
# Turnstile 人机验证配置
# CF_TURNSTILE_SITE_KEY = ""
# CF_TURNSTILE_SECRET_KEY = ""
# dkim config
# DKIM_SELECTOR = "mailchannels" # 参考 DKIM 部分 mailchannels._domainkey 的 mailchannels
# DKIM_PRIVATE_KEY = "" # 参考 DKIM 部分 priv_key.txt 的内容
# telegram bot 最多绑定邮箱数量
# TG_MAX_ACCOUNTS = 5
# 全局转发地址列表,如果不配置则不启用,启用后所有邮件都会转发到列表中的地址
# FORWARD_ADDRESS_LIST = ["xxx@xxx.com"]

项目官方文档

访问项目官方文档

项目 GitHub 仓库

访问项目 GitHub 仓库

© 版权声明
THE END
喜欢就支持一下吧
赞赏