用过 CloudFlare 的都知道,他家的 mail 服务是可以将接收到的邮件转发到指定邮箱用来实现域名邮箱的收件服务的,但是这种方式只可以接收,不能发送邮件。
偶然间看到一个开源项目,实现了使用域名部署临时邮箱,研究了一下发现,发件服务使用的是 CloudFlare 的 Worker 实现的,个人能力有限,网上搜索了一番,总结了几篇文章的教程,成功的实现了域名邮箱的发件。
绑定域名
首先需要将域名绑定到 CloudFlare 上,这一步想必不用多说了吧,会的都会。
启用电子邮件路由
官方教程:https://developers.cloudflare.com/email-routing/get-started/enable-email-routing/
1、进入 CloudFlare 控制台,选择网站,找到你想要添加域名邮箱的域名,点击进入
2、点击侧边栏 电子邮件》电子邮件路由,然后点击开始使用
3、设置域名邮箱前缀和转发邮箱
4、验证转发邮箱,我这里直接用的登录 CloudFlare 的邮箱,直接显示已验证
5、添加解析记录
创建 Worker
Work 代码从这里复制即可:https://gist.github.com/ihsangan/6111b59b9a7b022b5897d28d8454ad8d
直接粘贴部署,一气呵成,不需要修改什么
准备 DKIM 私钥(可选,非必须)
DKIM 是一种电子邮件认证技术,可以验证邮件的发送者身份。
在终端执行下面的命令,生成 DKIM 私钥,参考 Adding-a-DKIM-Signature:
openssl genrsa 2048 | tee private_key.pem | openssl rsa -outform der | openssl base64 -A > private_key.txt
echo -n "v=DKIM1;p=" > dkim_record.txt && openssl rsa -in private_key.pem -pubout -outform der | openssl base64 -A >> dkim_record.txt
这两条命令会生成 3 个文件:
- private_key.pem:私钥文件
- private_key.txt:私钥文件,base64 编码
- dkim_record.txt:DKIM 记录
其中 private_key.txt 文件中的内容就是 DKIM_PRIVATE_KEY 的值,如果想要配置的话,发件的时候需要这个值。
配置域名解析
1、进入 Cloudflare 托管域名控制台,选择你的域名 -> 点击 DNS,接下来,需要添加 3 条 TXT 记录并修改 1 条 TXT 记录
新增的如下:
类型 | 名称 | 值 | 备注 |
---|---|---|---|
TXT | _dmarc |
v=DMARC1; p=reject; adkim=s; aspf=s; rua=mailto:YYY; ruf=mailto:YYY pct=100; fo=1; |
固定值,直接粘贴 |
TXT | mailchannels._domainkey |
v=DKIM1;p=MIIEpQIBAAKCAQEA... |
这一条可以不配置,值为上一步 dkim_record.txt 文件的内容 |
TXT | _mailchannels |
v=mc1 cfid=yesmore.workers.dev |
将其中的 yesmore 修改为你的 Worker 账号名称,不知道的可以参考下边截图 |
需要修改的如下(TXT记录值为 example.com 即你的域名的那条):
类型 | 名称 | 值 | 备注 |
---|---|---|---|
TXT | example.com | v=spf1 include:_spf.mx.cloudflare.net include:relay.mailchannels.net ~all |
把值替换为这个 |
最后一共 4 条 TXT 记录:
如果配置了 DKIM,可以在 dkim-record-checker 验证 DKIM 记录是否配置成功。
验证发送
方法一:打开网页 https://<sender-name>.<your-name>.workers.dev/submit
根据表单填写内容吗,验证是否可以正常发送
方法二:使用 API 发送
请求地址 https://<sender-name>.<your-name>.workers.dev
请求方法 POST 请求体:
{
"from": {
"email": "[email protected]",
"name": "发送者"
},
"personalizations": [
{
"to": [
{
"email": "[email protected]",
"name": "接收者"
}
]
}
],
"subject": "邮件标题",
"content": [
{
"type": "text/plain",
"value": "邮件内容"
}
]
}
成功的话会返回一个 null,失败的话会返回报错信息,根据报错信息 google 一下
VIA
oiov/vmail: An open source temporary email tool. 只需一个域名部署临时邮箱,支持收发邮件,多域名邮箱配置,密码找回。https://github.com/oiov/vmail
如何使用Cloudflare Email Routing 免费发送邮件 – 软件分享 – LINUX DO https://linux.do/t/topic/47025
vmail/docs/send-tutorial.md at main · oiov/vmail https://github.com/oiov/vmail/blob/main/docs/send-tutorial.md