電子郵件自動友連申請

Rin 支援透過電子郵件自動完成友連的申請、修改與刪除,全程無需登入後台,適合希望把友連入口交給訪客自助維護的情境。

運作原理

訪客向您的專用信箱位址(例如 friend-request@你的網域.com)寄送郵件,Rin 的 Worker 透過 Cloudflare Email Routing 接收郵件並自動處理:

  1. 訪客寄送本文為 友链申请 的郵件。
  2. Rin 回覆一封郵件,附上需要填寫的 JSON 範本。
  3. 訪客依照範本填寫 JSON 並回覆。
  4. Rin 產生一組 8 位數驗證碼(記為 變數a),並讓訪客選擇驗證方式:回覆 1 使用 DNS TXT 記錄驗證,回覆 2 使用 上傳 HTML 檔案驗證(1 / 一 / 方案一 / 方法一 皆可;2 / 二 / 方案二 / 方法二 同理)。
  5. 若選擇 DNS:Rin 回覆新增 TXT 記錄的教學——主機記錄 _jiaofriend、記錄類型 TXT、記錄值 變數a。若選擇檔案:Rin 回覆驗證用的 HTML 原始碼,要求訪客在站台根目錄建立 變數a.html 並將原始碼原樣複製進去(不要增刪任何內容)。
  6. 訪客完成對應設定後回覆本文 请你进行下一步验证。
  7. Rin 依所選方式驗證:DNS 方式透過 Cloudflare DNS-over-HTTPS 查詢 _jiaofriend.訪客網域 的 TXT 記錄,要求記錄值中包含 變數a;檔案方式存取 https://訪客站台URL/變數a.html,要求 GET 回傳 200 且頁面 <body> 中包含 變數a。驗證通過後直接在資料庫中完成友連的新增/修改/刪除。

支援的操作與 JSON 範本

操作觸發本文(必須完全一致)JSON 範本欄位
友連申請友链申请name 站台名稱、url 站台URL、avatar 站台圖示URL、desc 站台簡介
友連修改友链修改oldUrl 舊站台URL、newUrl 新站台URL、avatar、name、desc
友連刪除友链删除url 站台URL
強制結束结束本次友链申请無(立即終止目前的申請)

說明:

  • 訪客回覆的本文必須只包含那份 JSON。
  • 修改友連時需分兩次驗證舊站台與新站台,Rin 會為每個站台分別產生驗證碼,並在每個站台驗證前重新詢問驗證方式。
  • 任意階段回覆 结束本次友链申请 可立即終止目前的申請,釋放占用後其他人可繼續申請。
  • 結束提示只會出現在進行中的郵件裡。申請一旦結束(成功、資訊有誤被終止、強制結束、逾時自動結束),對應郵件就不再帶有該提示。
  • 由於系統收件位址與寄件位址不同,直接使用郵件用戶端的「回覆」會寄到寄件位址而無法被處理。每封需要回覆的郵件末尾都會提示使用者新建郵件並寄送到收件位址。
  • 站台 URL 支援轉址連結:若 URL 形如 https://link.你的網域/?...&to=https://真實站台&...,系統會自動從 to 參數擷取真實位址進行比對,因此修改/刪除時提供轉址連結或真實位址皆可。
  • 郵件寄送由 MailPort 寄件服務完成,與電子郵件驗證碼登入共用同一組 EMAIL_SEND_URLS / EMAIL_SEND_KEYS。

前提條件

  1. 已部署 MailPort 並設定 EMAIL_SEND_URLS / EMAIL_SEND_KEYS(見 環境變數說明)。
  2. 已開通 Cloudflare Email Routing,並把專用位址(如 friend-request@你的網域.com)的路由規則動作設為 Send to a Worker,目標 Worker 選擇部署 Rin 的 Worker。
  3. 出站郵件(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 規則如下:

  1. 申請信箱已綁定帳號:若申請者的信箱在部落格中已綁定某個帳號(users.email 相符),則友連歸屬該帳號的 uid。
  2. 無綁定帳號:否則歸屬一個專門的「自助申請」帳號,預設 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 範本,即表示整條鏈路已打通。