树洞剪藏#剪藏#树洞剪藏

白嫖CloudFlare建立自己的电子邮局 - 资源荟萃 - LINUX DO

2024 年 12 月 2 日1 分钟
分享Twitter / XTelegram微博

同步来源:树洞剪藏 源站剪藏 ID:192 原文地址:https://linux.do/t/topic/249521

打开原文 · 打开源站剪藏快照


白嫖CloudFlare建立自己的电子邮局 - 资源荟萃 - LINUX DO 然后在… ">

然后在控制台下面的输入框输入 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 CURR... "> 然后在控制台下面的输入框输入 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 CURR... ">

跳到主要内容

话题

我的帖子

关于

友链

文档

更多

外部链接

Status

Connect

Channel

Telegram

类别

开发调优

资源荟萃

文档共建

跳蚤市场

前沿快讯

福利羊毛

搞七捻三

运营反馈

深海幽域

所有类别

标签

抽奖

公告

精华神帖

快问快答

人工智能

所有标签

消息

收件箱

频道

常规频道

直接消息

聊天

Default

真诚 、 友善 、 团结 、 专业 ,共建你我引以为荣之社区。 《常见问题解答》

白嫖 CloudFlare 建立自己的电子邮局

资源荟萃

Cloudflare 域名邮箱

11月 3 日

1 / 10

11月 3 日

29 天

前排围观支持一下 感谢分享大佬厉害啊 有点厉害支持~~

youyi1314 海纳百川

1 29 天 #1

目标

创建属于自己的 cloudflare 邮箱系统

打开 SMTP 服务用于自己的系统

创建 D1 数据库

cloudflare→worker 和 pages→D1 SQL 数据库→创建

自己输入名称,地区选不选吧,理论上速度都差不多

然后在控制台下面的输入框输入

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);

workers 后端

Workers 和 Pages→创建→创建 worker→编辑代码

下载这个 js 然后上传上去 8

然后在设置里

如果你想用自己的域名就在‘域和路由’里添加一个域名( 注意,这个域名是用于 api 的域名,不是用于登录 web 邮箱的域名 )

然后在’变量和机密’中添加变量

下面等号左边为 value,等号右边为值,符号(比如引号和括号也要输入在 cf 框内),如果不需要就不用增加变量

TEXT
# TITLE = "Custom Title" # 自定义网站标题
PREFIX = "tmp" # 要处理的邮箱名称前缀,不需要后缀可配置为空字符串
# (min, max) adderss 的长度,如果不设置,默认为 (1, 30)
# ANNOUNCEMENT = "Custom Announcement" # 自定义公告
# address name 的正则表达式,只用于检查,符合条件将通过检查
# ADDRESS_CHECK_REGEX = "^(?!.*admin).*"
# address name 替换非法符号的正则表达式,不在其中的符号将被替换,如果不设置,默认为 [^a-z0-9], 需谨慎使用,有些符号可能导致无法收件
# ADDRESS_REGEX = "[^a-z0-9]"
# MIN_ADDRESS_LEN = 1
# MAX_ADDRESS_LEN = 30
# 如果你想要你的网站私有,取消下面的注释,并修改密码
# PASSWORDS = ["123", "456"]
# admin 控制台密码,不配置则不允许访问控制台
# ADMIN_PASSWORDS = ["123", "456"]
# 警告:管理员控制台没有密码或用户检查
# DISABLE_ADMIN_PASSWORD_CHECK = false
# admin 联系方式,不配置则不显示,可配置任意字符串
# ADMIN_CONTACT = " [email protected] "
# DEFAULT_DOMAINS = ["xxx.xxx1" , "xxx.xxx2"] # 默认用户可用的域名 (未登录或未分配角色的用户)
DOMAINS = ["xxx.xxx1" , "xxx.xxx2"] # 你的域名,支持多个域名
# 对于中文域名,可以使用 DOMAIN_LABELS 显示域名的中文展示名称
# DOMAIN_LABELS = ["中文.xxx", "xxx.xxx2"]
# 新用户默认角色,仅在启用邮件验证时有效
# USER_DEFAULT_ROLE = "vip"
# admin 角色配置,如果用户角色等于 ADMIN_USER_ROLE 则可以访问 admin 控制台
# ADMIN_USER_ROLE = "admin" # the role which can access admin panel
# 用户角色配置,如果 domains 为空将使用 default_domains
# 如果 prefix 为 null 将使用默认前缀,如果 prefix 为空字符串将不使用前缀
# USER_ROLES = [
# { domains = ["xxx.xxx1" , "xxx.xxx2"], role = "vip", prefix = "vip" },
# { domains = ["xxx.xxx1" , "xxx.xxx2"], role = "admin", prefix = "" },
# ]
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"
# DISABLE_SHOW_GITHUB = true # 是否显示 GitHub 链接
# 默认发送邮件余额,如果不设置,将为 0
# DEFAULT_SEND_BALANCE = 1
# NO_LIMIT_SEND_ROLE = "vip" # 可以无限发送邮件的角色
# Turnstile 人机验证配置
# CF_TURNSTILE_SITE_KEY = ""
# CF_TURNSTILE_SECRET_KEY = ""
# telegram bot 最多绑定邮箱数量
# TG_MAX_ADDRESS = 5
# 全局转发地址列表,如果不配置则不启用,启用后所有邮件都会转发到列表中的地址
# FORWARD_ADDRESS_LIST = [" [email protected] "]

这里说一下我的配置

ADMIN_PASSWORDS [“你的管理员密码”]

PASSWORDS [“网页登录密码,如果不需要私人网页那不用填这个”]

TITLE “网站标题”

DOMAINS [“你的域名”]

ENABLE_USER_CREATE_EMAIL true #允许发送邮件 ,不配置意味着不允许

ENABLE_USER_DELETE_EMAIL true #允许删除 ,不配置同理

JWT_SECRET “xxx” 不知道有什么用但是应该有用

PREFIX " " #要处理的邮箱名称前缀 ,不需要前缀可配置为空字符串

然后配置 D1 数据库

往下滑到 绑定→D1 数据库

名称为 DB 值为你之前创建的数据库

然后访问网址,如果显示 OK 就执行下一步,如果不 OK 就看看是哪里出了问题

如果你要启用注册用户功能,并需要发送邮件验证,则需要创建 KV 缓存,不需要可跳过此步骤

点击 Workers 和 Pages→KV→创建命名空间,名称随意

然后在刚才绑定数据库那里再绑定个 KV 空间就行

worker kv 的变量名称要设置为大写的 KV ,否则无法识别(

配置邮件转发

配置对应域名的 电子邮件 DNS 记录,如果是多个域名,需要配置多个域名的 电子邮件 DNS 记录

在将电子邮件地址绑定到您的 Worker 之前,您需要启用电子邮件路由并拥有至少一个经过验证的电子邮件地址。

配置每个域名的 Cloudflare Email Routing catch-all 发送到 worker

2154×1176 40.8 KB

Pages 前端

Wokers 和 Pages→创建→Pages→上传资产

在 这个页面 3 里的‘输入地址’输入 api 网址,就是刚才 workers 里的 https://xxx.aaa.dev 或者你自己的域名 ,然后点击生成后下载压缩包后上传到这个 pages

手动下载这个压缩包 1 ,修改压缩包里面的 index-xxx.js 文件 ,xx 是随机的字符串

搜索 https://temp-email-api.xxx.xxx ,替换成你 worker 的域名,然后压缩成新的 zip 文件,然后上传

在自定义域里可以用自己的域名

配置发送邮件

使用 Cloudflare Workers 给已认证的邮箱发送邮件

admin 后台 账号配置 已验证地址列表 (可通过 cf 内部 api 发送邮件)

使用 resend 发送邮件

注册 Login · Resend 1 根据提示添加 DNS 记录,API KEYS 页面创建 api key

在 cloudflare worker 页面的变量中添加 RESEND_TOKEN

如果你有多个域名,对应不同的 api key,可以在变量中添加多个 secret, 名称为 RESEND_TOKEN_ + <. 换成 _ 的 大写域名>, 例如你的域名为 1.aaa.bbb 和 2.ccc.ddd

RESEND_TOKEN_1_aaa_bbb key1

RESEND_TOKEN_2_ccc_ddd key2

SMTP

如果你用了 resend 服务,直接用 resend 的就好

如果用 cf 的话建议看官方文档 搭建 SMTP IMAP 代理服务 | 临时邮箱文档 6

不是因为我看不懂

绝对不是(

而且 cf 的 smtp 服务好像只能给同一个 cf 邮局内的邮件发送,所以还是用 resend 吧(

鸣谢

官方文档 9

github 链接 5

heart

+1

tieba_087

18

回复

578

浏览量

7

链接

10

用户

蓝莓奶昔 Lemon_Zuo 活跃用户

29 天 #2

再补一点 githubaction 部分的 ,方便后续更新

2 回复

banlan 指导顾问

29 天 #3

季度泥得菜花

1 回复

mutu emberdusk

29 天 #4

那个乱码有没有办法解决,tg 机器人收到的信息,wasm 不会整,再就是 mini app. 求大佬赐教。

1 回复

tc WaterKing 大预言家

29 天 #5

awesome

回复

大帅哥 handsome 种子用户

29 天 #6

感谢大佬分享。

1 回复

DJKS user504 圆圆满满

29 天 #7

感谢佬的教程

1 回复

asp

29 天 #8

我用路由转发挺方便的

2 回复

Wolverine IceFire

29 天 #9

感谢佬的分享

2 回复

嘚 wumi

29 天 #10

cloudflare 真啥都能干,省去一台 vps。

2 回复

分享

加入书签

举报

回复

已取消置顶

常规

您会在别人 @ 您或回复您时收到通知。

推荐

相关

新话题和未读话题

话题列表,带有按钮的列标题可以排序。

话题

回复

浏览量

活动

唐纳德 • 特朗普钦定的 Java 脚手架,让 Java 再次伟大!v2.7 (已接入L站登录福利) 164 免打扰

资源荟萃

Java

779

11/10 00:00

7 小时

【Cloudflare系列教程】汇总帖 120 免打扰

资源荟萃

精华神帖

157

03/05 14:27

16 小时

DeepLX已切换至 LINUX DO Connect 认证 deeplx.org 121 免打扰

资源荟萃

DeepLX

1.4k

06/14 16:04

19 小时

开个帖子,大家一起来推荐Mac 下非常好用的软件吧 38 免打扰

资源荟萃

精华神帖

372

09/09 00:00

1 天

一个月全力打造,开源网站助您快速完成论文,集成 ChatGPT 实现真实文献引用 16 免打扰

资源荟萃

ChatGPT

583

02/10 13:47

2 天

有 108 个未读 话题 和 181 个新 话题,

或浏览 资源荟萃 中的其他话题

开始阅读 启用自动点赞

楼主 AI

等级

相关文章