讓 Slate 的系統信改用 Farside 自己的寄件網域(notify.farside.work)寄出、寄件人顯示 Farside——第一個要接的是忘記密碼信,之後才輪到告警和任務通知。

#214 Email 寄信功能:建議用 Resend + 獨立子網域

狀態
卡住
誰在做
宜芳分派
做到哪
前置都做完了:寄件網域在 Resend 驗證通過(10/02)、用 API 寄的管道測試信 delivered(10/02)、正式專用金鑰建好並測過 SMTP 登入(10/04)。只剩「把 Supabase 的寄信設定切到 Resend」還沒做。10/04 讀設定時發現現在其實是走公司 Gmail 的自訂 SMTP,不是當初以為的內建寄信,所以回頭請負責人再確認一次。這張不改程式,沒有 PR。
卡在
負責人還沒回 10/04 那一題:要不要把系統寄信從現在的 Gmail 換成 Resend(寄件人改成 Farside)。10/04 晚上已經提醒過一次。
下一步
宜芳請負責人在 #214 回「同意」或「不同意」。同意:開發者先在單上公告切換時間 → 用 Supabase 管理 API 切換並讀回確認 → 負責人親自收一封忘記密碼信驗收。不同意:維持 Gmail,留言記下決定後結案。不管哪一種,宜芳順便決定告警、任務通知要不要另開需求單。
提醒:① 單子本文的「現況」已經過期:本文說「系統完全沒有寄信能力」,10/04 查到 Supabase 早就設了自訂 SMTP 走公司 Gmail,忘記密碼信一直寄得出去;本文提到設定頁那個假的「Email 通知」開關,在目前 main 的程式碼裡我找不到。② 10/04 中午那則「一般使用者可能收不到信、開放註冊前一定要改」是錯的,同一天 14:20 已自己更正,不用被它嚇到。③ 負責人 10/02 說切換會影響「忘記密碼與邀請信」,但程式裡邀請根本不寄信(只產生連結),所以實際受影響的只有忘記密碼信(登入頁與設定頁兩個入口)。④ 負責人 10/01 在這張回的四題(先做平台會員/帳單、付款主體按個人、停用成員連外部 AI 權杖一起停、法務會計確認人)是 #240 的題目,已經整理進 #248 最上面的帳務清單,看那裡就好。⑤ 跟 #257(開放自行註冊)有關:註冊打開之後寄信量會變大,如果正式站有開 Email 確認,註冊確認信也走同一個寄信設定——到時 Gmail 每小時 60 封的上限可能不夠,這是換 Resend 的另一個理由,但單上沒人這樣主張過。⑥ 標籤「待負責人裁決」是對的,唯一卡住的就是 Gmail → Resend 那一題。

這張要解決什麼

忘記密碼、登不進 Slate 的使用者(之後也包括要收告警、任務通知的人),在登入頁按「忘記密碼?」要一封重設信。現在這封信由公司 Gmail 代寄,寄件人是舊的 Ocean Lab AI 名稱,而且每小時最多 60 封。——要能 收到一封寄件人顯示 Farside、從 notify.farside.work 寄出的重設密碼信,點連結設好新密碼就能登入。

一步一步 18 步

  1. 負責人 回覆單子本文問的四件事:服務商、要不要用子網域、子網域叫什麼、先接哪一種信
    定案:用 Resend、用子網域 notify.farside.work、順序是忘記密碼 → 告警 → 任務通知(9/29)。之後負責人把 Cloudflare 權限給了開發者,DNS 由開發者自己設
  2. 開發者(委託處理) 在 Resend 建寄件網域,在 Cloudflare 加四筆驗證用的 DNS 紀錄(DKIM、SPF、回報信的 MX、一筆 CNAME)
    Resend 回報 notify.farside.work verified(10/02 完成)。網站原本的網域、主網域收信設定都沒動;也關掉了開信與點擊追蹤
  3. 開發者(委託處理) 直接呼叫 Resend API 寄一封普通測試信(不是忘記密碼信)
    Resend 狀態 delivered(10/02)——只證明「這個網域寄得出去」,不代表 Slate 的忘記密碼信已經改走這裡
  4. 開發者(委託處理) 照負責人 10/02 第 4 點另開一把正式專用的 Resend 金鑰:只能寄信、只限 notify.farside.work,不沿用本機那把;用它試登入 Resend 的 SMTP
    SMTP 登入成功,拿它查網域被拒——確認權限真的只剩寄信(10/04)。金鑰值私下保管,沒貼在 GitHub
  5. 開發者(委託處理) 用 Supabase 管理 API 讀正式站現在的寄信設定
    發現早就設了自訂 SMTP、走公司 Gmail(寄件人名稱是舊的 Ocean Lab AI、每小時上限 60 封),忘記密碼信一直寄得出去。這跟 10/02 裁決時以為的「從內建寄信改走 Resend」前提不同,所以回頭問負責人(10/04)
  6. 負責人 回答:還要不要把系統寄信從 Gmail 換成 Resend、寄件人改成 Farside
    同意 → 往下走;不同意 → 維持 Gmail,本單記下決定後結案。現在卡在這一步
  7. 開發者(委託處理) 切換之前先在 #214 留言公告時間(#248 第 2 條:動正式環境前先講)
    大家知道從什麼時候起,忘記密碼信的寄件人會變成 Farside
  8. 開發者(委託處理) 用 Supabase 管理 API 把自訂 SMTP 改成 Resend(smtp.resend.com、port 465、帳號 resend、密碼用正式專用金鑰、寄件人 Farside <noreply@notify.farside.work>),改完再讀回一次確認
    之後所有從 Supabase 寄出的忘記密碼信都改由 Resend 寄。切換後會回不到 Gmail(API 讀不到 Gmail 密碼,要回去得請那個 Gmail 信箱的主人重新產生應用程式密碼)
  9. 使用者(忘記密碼的人) 打開 Slate 登入頁,按密碼欄下面的「忘記密碼?」
    進到「重設密碼」頁
    登入
    登入
    記住我——關掉瀏覽器後仍保持登入;共用電腦請不要勾
    登入
  10. 使用者(忘記密碼的人) 輸入自己的 Email,按「寄出重設連結」
    格式不對會當場提示;格式對就送出
    重設密碼
    重設密碼
    輸入你的 email,我們會寄一封重設連結給你
    寄出重設連結(送出中顯示「寄送中…」)
  11. 系統 請 Supabase 寄重設密碼信;Supabase 透過切換後的 SMTP(Resend)寄出
    不管這個 Email 有沒有註冊過,畫面都顯示同一句話——分開講等於讓任何人拿這個表單查誰是會員
    重設密碼(已寄出)
    如果 你輸入的 Email 是已註冊的帳號,重設連結已經寄出。信可能會進到垃圾郵件匣。連結有時效,過期就回來再寄一次。
  12. 使用者(忘記密碼的人) 打開自己的信箱找那封信(收件匣或垃圾郵件匣)
    看到寄件人是 Farside 的重設密碼信
    信箱裡的重設密碼信
    寄件人:Farside <noreply@notify.farside.work>
    主旨與內文:沿用 Supabase 上現有的模板(長什麼樣子,單上沒有人確認過)
  13. 使用者(忘記密碼的人) 點信裡的連結
    系統先確認連結(畫面短暫顯示「確認連結中…」),有效就帶到「設定新密碼」
    設定新密碼
    設定新密碼
    輸入兩次新密碼,確認沒有打錯
    設定新密碼
  14. 使用者(忘記密碼的人) 輸入兩次新密碼,按「設定新密碼」
    密碼改好,直接登入進去
    設定新密碼(完成)
    密碼已更新,正在帶你進去…
  15. 使用者(忘記密碼的人) (例外)點到過期或已經用過的連結
    畫面說明原因,給一個回去重寄的連結
    設定新密碼(連結失效)
    設定新密碼
    這個連結沒辦法用了
    重設連結已經過期或被用過了。連結有時效,而且只能用一次。回到忘記密碼頁重新寄一封就好。
  16. 已登入的使用者 (第二個入口)到「設定 → 個人帳戶」,在「變更密碼」區塊按「寄送重設密碼連結」
    畫面顯示已寄出;這封信跟登入頁那封走同一條路,一樣由 Resend 寄
    設定 → 個人帳戶 → 變更密碼
    變更密碼
    忘了目前的密碼?寄一封重設密碼的信到 你的 Email。
    寄送重設密碼連結
    已寄出 重設密碼的連結已寄到 你的 Email。
  17. 開發者(委託處理) (出狀況時)切換後寄不出來
    照負責人 10/02 第 2 點:先關掉自訂 SMTP、退回 Supabase 內建寄信,再查原因,並在 #214 留言。注意:內建寄信只寄得到專案團隊成員的信箱,退回的那段時間一般使用者收不到重設信
  18. 負責人 親自在登入頁要一封忘記密碼信、確認收得到;開發者同時從 Resend 後台確認那封信的投遞紀錄
    通過就可以結案。告警、任務通知要不要接、怎麼接,另外決定(見「還沒定的」)

已經定的 10 條

還沒定的 4 題

還要不要把系統寄信從現在的 Gmail 換成 Resend、寄件人改成 Farside?(10/02 裁決時以為現況是內建寄信,10/04 才查到其實是 Gmail)
  • 同意:照原計畫切到 Resend,寄件人變 Farside
  • 不同意:維持 Gmail,這張記下決定後結案
建議:開發者在單上建議「同意」:寄件人與網域統一成 Farside(10/02 已定)、網域已驗證,也不必再借公司信箱寄系統信。這是開發者的建議,還不是裁決
誰裁:負責人
切換後萬一出事,退路是什麼?10/02 定的退路是回 Supabase 內建寄信,但內建只寄得到團隊成員,等於退回那段時間一般使用者收不到重設信;要回 Gmail 又得請 Gmail 信箱主人重新產生應用程式密碼
  • 照 10/02:退回內建寄信,接受那段時間一般使用者收不到
  • 切換前先請 Gmail 信箱主人備好新的應用程式密碼,出事可以回 Gmail
誰裁:負責人
告警、任務通知(順序第 2、3 名)要留在這張,還是忘記密碼驗收完就結案、另開需求單?兩者都還沒有設計:誰會收到、什麼事件觸發、寄件人用哪個
  • 留在 #214 繼續做
  • #214 在忘記密碼驗收後結案,告警與任務通知照需求範本另開單
建議:開發者 10/04 凌晨的結案檢核清單把這張的驗收收斂到忘記密碼(「驗收通過即結案」),另開單比較清楚;由宜芳決定
誰裁:宜芳
忘記密碼信的主旨和內文要不要改成中文、Farside 的口吻?現在沿用 Supabase 上的模板,正式站實際長什麼樣子單上沒人確認過
  • 維持現在的模板
  • 改成中文、Farside 品牌的模板
建議:驗收那封信時順便看內文,再決定要不要另開單
誰裁:負責人

怎麼驗收 5 項

這張不做

相關的單