首页 | Blogs | 项目合集 | Bilibili↗
←返回 |
创建:2024-08-27 | 最后更新:2024-08-27
QQ邮箱以前可以随意自定义域名,但是这几年把这个功能合并到了VIP里面
不过不要担心不要怕,靠Cloudflare Workers,可以自己部署一个简易的邮件收发系统。
收取邮件
收取邮件很简单,靠Cloudflare的免费电子邮件路由就行
官方有教程,网上相关教程也不少,就不赘述了。
至于非CF托管域名,则看看你的DNS服务商有没有这个功能吧。
发送邮件
发送主要思路就是利用已有服务,分为:
- GMail别名(不是很方便就略掉了)
- Outlook别名
- CF Workers+MailChannels(失效)
Outlook
前往添加账户别名
输入上文的自动转发的邮箱地址
确认并验证即可
之后使用Outlook发信的时候就能选择这个地址作为发信地址了。
CFWorkers
前排提示:本人辛苦3小时搞完了才发现MailChannels关闭了这个服务
https://support.mailchannels.com/hc/en-us/articles/26814255454093-End-of-Life-Notice-Cloudflare-Workers
此方法已失效
配置Worker
重头戏是如何发送邮件。
有一个Gist可以靠MailChannel API临时发送邮件。
直接进去复制就行:ihsangan/index.js
当然,那个可能有点简陋,所以我也会上传我自己用SoberJS UI美化后的版本(记得修改一下里面的默认值):kdxhub/EmailWorkers.js
之后前往Cloudflare,因为有免费的Worker可以白嫖
在左侧菜单中选择Workers
创建一个Workers并把上面的项目代码全部替换进去就行了
生成DKIM密钥
在下一步之前,需要弄一个DKIM密钥
DKIM 是一种电子邮件认证技术,可以验证邮件的发送者身份。
转到一个Linux终端或者安卓用Termux
反正能用OpenSSL就行
输入以下命令:
apt install openssl -y
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记录
转到域名DNS服务商的记录表,新增这3条记录
TXT 记录名称 |
值 | 备注 |
---|---|---|
_dmarc |
v=DMARC1; p=reject; adkim=s; aspf=s; rua=mailto:YYY; ruf=mailto:YYY pct=100; fo=1; |
固定值,直接粘贴 |
mailchannels._domainkey |
上一步中dkim_record.txt文件的内容 | |
_mailchannels |
v=mc1 cfid=kdx.workers.dev |
将其中的 kdx 修改为你的 Worker 域名称 |
你的域名 | v=spf1 a mx include:relay.mailchannels.net ~all |
接着前往dmarcly验证你的记录是否正确配置
第一个空填你的域名,第二个和图片一样填mailchannels
出现绿色的Success就是配置正确了。
开始发件
WebUI
还记得那个Worker你部署到哪里了吗
访问https://workers部署路径/submit
就可以打开Web发件UI了
POST请求
向https://workers部署路径/
发送下方POST请求即可
{
"from": {
"email": "发件邮箱[email protected]",
"name": "发件人昵称"
},
"personalizations": [
{
"to": [
{
"email": "收件邮箱",
"name": "收件人(这个列表可以拓展)"
}
]
}
],
"subject": "邮件主题(标题)",
"content": [
{
"type": "text/plain",
"value": "邮件内容,type定义类型,见于MIME类型"
}
]
}
成功会返回null
,否则返回错误详情。