无服务器搭建自己的邮局,支持多账号

无服务器搭建自己的邮局,支持多账号
雨天狂奔无服务器搭建自己的邮局,支持多账号
前言
众所周知,大善人 CF 有免费的邮件路由系统,只要在 CF 托管 1 个域名,就可以拥有一个免费的域名邮箱,拥有无限子域,可无限收件
但是 CF 的邮件路由最大的短板是:没有发信功能
(官方博客宣布近期将加入这一功能)。有些同学说无发信功能无所谓,其实有所谓,我就碰到过一个比较变态的国外服务商,用域名邮箱注册并收到验证码后,要求你用收件的邮箱回信发送此验证码,若发件邮箱与收验证码的邮箱不同,无法通过注册,即时使用第三方 SMTP 邮件服务器代发也无法通过
我曾经写过一个 定时群发邮件 的小项目,利用 Resend 的免费 API 实现了发信功能,但是这个项目是为了保活谷歌账号而产生的,功能非常有限。直到我发现了 cloud-mail 这个项目,CF 邮件路由
与 Resend API
完美合体,现在就教大家来部署一下,过程相对比较复杂,因为要设置的东西比较多
所需资源
- cloud-mail 项目仓库:GitHub - eoao/cloud-mail
- cloud-mail 官方文档:Cloud Mail
- cloudflare 云服务平台:CloudFlare
- Resend 免费发信平台:Resend
准备工作
1. 托管 1 个域名到 CF
这个就不讲了,长混互联网的应该都不知道,如果不知道可以搜索一下相关教程
我们假定这个域名是 mail.pp.ua
2. 获取自己 CF 账号的 ID
这个直接看 官方文档,非常简单,不详述
3. 获取自己 CF 账号的个人 API-KEY
这个也看 官方文档 吧。
重点强调:
- 这个 API-KEY 必须要有 worker、pages、R2、D1、kv 的编辑权限,使用 CF 官方
编辑 Cloudflare Workers
的模板来创建 API-KEY 即可 - API-KEY 只会显示 1 次,创建后立即保存下来备用
4. 创建 D1 数据库和 KV 存储并获取 ID
还是看 官方文档,其作用如下:
- D1:作为项目的数据库
- KV:用户项目缓存
5. 创建 R2 存储桶
R2 的作用:收发附件,如果不需要收发附件的功能,可以跳过这个步骤
看官方仓库的 issue,貌似部署时必须要 R2 参数,如果没有,部署会失败。而现在开通 R2 需要信用卡(只需绑卡并不收费,免费版有 10G 空间),有些同学可能没有信用卡,如果没有,R2_BUCKET_NAME 这个变量随意填一下,比如 mail
;如果有,按此 官方文档 操作,并给你的存储桶绑定自定义域名,假设为 r2.mail.pp.ua
,几个重点需要说明一下:
- 需要在 R2 管理页面创建 R2 的 API TOKEN
- 创建一个
账户级别
的 API 令牌,而不是用户级别,应用于所有存储桶
,权限为管理员读和写
- 记录下 R2 API 令牌的相关信息,包括以下内容:
- 访问密钥 ID:xxxxxxxxxxxxxxxxx412df7886df27
- 机密访问密钥:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx20a8db4b1dae4e3
- S3 端点地址:
https://你的账户ID.r2.cloudflarestorage.com
6. 完成上述步骤后,将获得以下环境变量的参数,部署项目时需要用到
- CLOUDFLARE_API_TOKEN=CF 账号的个人 API TOKEN
- CLOUDFLARE_ACCOUNT_ID=CF 账号的 ID
- D1_DATABASE_ID=D1 数据库 ID
- KV_NAMESPACE_ID=KV 存储 ID
- R2_BUCKET_NAME=R2 存储桶名称
- DOMAIN=用于本项目收发邮件的域名,需要写成 json 格式,如
["mail.pp.ua","mail.us.kg","mail.edu.kg"]
,如果只有一个域名,则写为["mail.pp.ua"]
- ADMIN=本项目的管理账号,如
admin@mail.pp.ua
- JWT_SECRET=随便写一串数字 + 字幕,无需记忆
开始部署
官方提供了 CF 部署的两种方式,一种是通过 github action 自动化部署,一种是通过 CF 的网页面板手动部署,这里推荐 github action 自动化部署
。CF 的网页面板链接仓库部署 worker 有一个 BUG,绑定的 KV 和 D1 会掉绑
1. Fork 作者的项目
2. 进入项目设置页,设置 Action 环境变量
也就是上文提到的 8 个变量,一一设置,然后运行 action,等待部署完成
3. 为域名开启邮件路由,实现收件功能
这个步骤直接看作者的 官方文档
4. 注册 Resend API,实现发信功能
看作者文档,已经写的非常详细了
该 API 免费层级只能绑定 1 个域名,每月发信上限为 1000 封
到此,部署其实已经完成了
以管理员身份登录
访问你部署的 worker 项目地址,以变量 ADMIN 设定的用户名注册,然后登录就是管理员账户
其他设置
关于设置部分大家就看官方文档吧,包括:
- 附件收发
- 邮件发送
- 人机验证
- TG 和其他邮箱转发
后话
我已咨询过作者,待 CF 邮件路由支持发信后,将第一时间支持该功能,届时就不再需要 Resend 的 API
#email #cloudflare