邮件自动友链申请
Rin 支持通过邮件自动完成友链的申请、修改与删除,全程无需登录后台,适合希望把友链入口交给访客自助维护的场景。
工作原理
访客向你的专用邮箱地址(例如 friend-request@你的域名.com)发送邮件,Rin 的 Worker 通过 Cloudflare Email Routing 接收邮件并自动处理:
- 访客发送正文为 友链申请 的邮件。
- Rin 回复一封邮件,附上需要填写的 JSON 模板。
- 访客按模板填写 JSON 并回复。
- Rin 生成一个 8 位验证码(记为
变量a),并让访客选择验证方式:回复1使用 DNS TXT 记录验证,回复2使用 上传 HTML 文件验证(1/一/方案一/方法一均可;2/二/方案二/方法二同理)。 - 若选择 DNS:Rin 回复添加 TXT 记录的教程——主机记录
_jiaofriend、记录类型TXT、记录值变量a。若选择文件:Rin 回复验证 HTML 源码,要求访客在站点根目录创建变量a.html并将源码原样复制进去(不要增改任何内容)。 - 访客完成对应配置后回复正文 请你进行下一步验证。
- Rin 按所选方式验证:DNS 方式通过 Cloudflare DNS-over-HTTPS 查询
_jiaofriend.访客域名的 TXT 记录,要求记录值中包含变量a;文件方式访问https://访客站点URL/变量a.html,要求 GET 返回 200 且页面<body>中包含变量a。验证通过后直接在数据库中完成友链的新增 / 修改 / 删除。
支持的操作与 JSON 模板
说明:
- 访客回复的正文必须只包含那份 JSON。
- 修改友链时需分两次验证旧站点和新站点,Rin 会为每个站点分别生成验证码,并在每个站点验证前重新询问验证方式。
- 任意阶段回复
结束本次友链申请可立即终止当前申请,释放占用后其他人可继续申请。 - 结束提示只出现在进行中的邮件里。申请一旦结束(成功、信息有误被终止、强制结束、超时自动结束),对应邮件就不再带该提示。
- 由于系统收件地址与发件地址不同,直接使用邮件客户端的「回复」会发到发件地址而无法被处理。每封需要回信的邮件末尾都会提示用户新建邮件并发送到收件地址。
- 站点 URL 支持跳转链接:若 URL 形如
https://link.你的域名/?...&to=https://真实站点&...,系统会自动从to参数提取真实地址进行匹配,因此修改/删除时提供跳转链接或真实地址均可。 - 邮件发送由 MailPort 发件服务完成,与邮箱验证码登录共用同一套
EMAIL_SEND_URLS/EMAIL_SEND_KEYS。
前提条件
- 已部署 MailPort 并配置
EMAIL_SEND_URLS/EMAIL_SEND_KEYS(见 环境变量说明)。 - 已开通 Cloudflare Email Routing,并把专用地址(如
friend-request@你的域名.com)的路由规则动作设为 Send to a Worker,目标 Worker 选择部署 Rin 的 Worker。 - 出站邮件(MailPort)所用的发件域名不要与你用于接收的域名完全相同,避免 Rin 处理到自己发出的邮件导致循环。
规则与限制
- 并发为 1:同一时间只允许一个访客申请。若他人同时发起,会被邮件告知 20 分钟后再试。
- 10 分钟验证时限:验证码自发出起 10 分钟内有效,超时则本次申请自动终止。
- 30 分钟总时限:一次申请从发起起 30 分钟内必须完成。
- JSON 或站点 URL 不合法:Rin 直接发邮件告知信息有误并终止本次申请。
- 严格验证:文件方式要求 GET 返回 200,且剔除标签/脚本后
<body>文本中能找到验证码;SPA 回退、自定义 404 页面(返回 200 的整页 HTML)、403/500、30x 重定向均视为未通过。DNS 方式要求_jiaofriend.访客域名的 TXT 记录值中包含验证码。两种方式都可在时限内重试。 - 通过邮件完成的友链
uid归管理员,accepted直接为1,无需后台再审核。
可选开关
friend_email_apply_enable(数据库配置,server.config):设为false可关闭该功能,默认开启。可通过后台设置页或serverConfig写入。
UID 归属(自助申请友链的归属账号)
通过邮件自助申请的友链,其归属 uid 规则如下:
- 申请邮箱已绑定账号:若申请者的邮箱在博客中已绑定某个账号(
users.email匹配),则友链归属该账号的uid。 - 无绑定账号:否则归属一个专门的「自助申请」账号,默认
uid = 7。
如何自定义
- 方式一(推荐,无需改代码):在后台设置或
serverConfig中写入friend_email_owner_uid,值为你希望使用的账号uid(例如7)。 - 方式二(改代码默认值):编辑
server/src/services/friend-email.ts中的常量DEFAULT_EMAIL_OWNER_UID(默认7)。
注意:无论哪种方式,请确保目标
uid对应的账号已存在,否则写入友链时会因外键约束失败。
部署后验证
向 friend-request@你的域名.com 发一封正文为 友链申请 的邮件,应收到回复邮件与 JSON 模板,即表示整条链路已打通。