幫旅遊部落格加上「訂閱電子報」
客戶專案回顧
Ricky-
08 月 22,2026

客戶原本的 footer 有一個「訂閱」表單,但它只是版型——填了 email 什麼都不會發生。我們要把它變成真的能用:收 email、寄歡迎信、發新文章時通知每位讀者、還要能安全退訂。拆開來,其實是三條各自獨立的流程。

訪客訂閱 footer 表單 存進資料庫 歡迎信 + 密件通知站長 站長發文 發佈文章 背景廣播(節流) 逐封通知每位訂閱者 讀者退訂 信裡連結 確認頁 → POST 退訂 + 通知站長
三條獨立流程:訂閱、發文廣播、退訂——各自都能單獨運作與測試。

決策一:先收信,還是先能寄?

我們刻意把「收集並存下 email」和「實際寄信」拆成兩層。前者不依賴任何寄信服務就能上線——就算還沒設好 SMTP,訂閱一樣寫得進資料庫,信件只是印到後台日誌。這讓客戶可以先讓表單真的能用,寄信之後再接,不必卡在一起。

決策二:Gmail SMTP 還是專門寄信服務?

客戶剛起步、訂閱數不高,我們選了最省事的 Gmail SMTP(用應用程式密碼即可),並在設計上留好退路:哪天量大了,只要換掉寄信這一層就能升級到 Resend/SES。

 Gmail SMTP(我們選的)Resend / SES
成本免費免費額度後計費
每日量約 500 封數萬起
設定應用程式密碼需驗證寄件網域
到信率普通較好
適合剛起步、低量規模化

決策三:要不要「雙重確認」?

對一個個人旅遊部落格,我們用單重訂閱:填了 email 就直接算訂閱、並寄一封歡迎信,不強迫再點確認信。門檻低、體驗順;但退訂一定要做好——這也是後面資安那篇的重點。

最後這套包含哪些零件

整個訂閱系統其實是六個小零件組起來的,每一個都對應這個系列裡的一篇筆記:

Subscribers 資料表 email · 名字 · 狀態 · token 訂閱端點(冪等) 重複訂閱不出錯 歡迎信 + 站長通知 個人化稱呼 新文章廣播 背景 · 節流 → FN04 安全退訂 token · 兩段式 → FN05 資料庫重試 冷啟動不噴 500 → FN01
六個零件,各司其職;把大功能拆成能單獨測試的小塊。

誠實的取捨

  • 背景廣播是行程內佇列,容器重啟會漏掉沒送完的;我們用「先標記已寄」換取「不會整批重寄」。
  • Gmail 有每日上限,訂閱數長大就要換寄信服務——但那是「幸福的煩惱」,留給有需要的那天。
  • 每個零件都可獨立驗證,正是這樣我們才敢一塊一塊接、一塊一塊上線。
帶得走的一句話

「加一個訂閱功能」聽起來是一件事,實際上是六件小事。把它們拆開——收信、歡迎、廣播、退訂、重試、資料模型——每一塊都簡單、可測、可獨立上線,整套才穩。

Tags:
產品電子報


相關文章
能不能看到圖,決定該用哪個 AI
能不能看到圖,決定該用哪個 AI
ricky - 2026-08-22T09:12:17.255607Z
從 10 張照片寫食記這種任務的本質是「看」——多模態 agent 能挑圖讀價目板寫真 alt,純文字 agent 只會盲挑瞎編。
測試要測「真的會發生的那條路」
測試要測「真的會發生的那條路」
ricky - 2026-08-22T09:12:20.021686Z
驗收發文通知時只測了「草稿改發佈」,但使用者走「新建即發佈」——好測的路剛好避開了 404,提醒要測真實路徑。
從零開始製作一個ip查詢網站-第三章 透過IP取得地理位置
從零開始製作一個ip查詢網站-第三章 透過IP取得地理位置
chris - 2025-11-29T06:05:00Z
從使用者 IP 取得地理資訊不是難事,但要完整呈現城市、國家、緯度/經度就需要好用的 API 與前端實作。這篇文章示範如何使用 ipapi.co 取得位置資料,並在 React 裡動態顯示使用者所在位...
訂閱電子報
隨時掌握最新的創業故事與設計開發過程
內容包含來自麒航團隊的日常分享、專業知識與工具推薦,助你了解更多創業背後的思維與技術。
麒航私房推薦
Clelereve Blog LogoClelereve Blog LogoClelereve Blog Logo
廣告區
Clelereve Blog Logo
聯絡我們
任何合作或問題請洽:
clelereve@gmail.com
Follow us
Copyright © 2025 blog.clelereve.com - All Rights Reserved
Frontend Version: -- | Backend Version: --
創業實驗筆記 - Clelereve Blog | 幫旅遊部落格加上「訂閱電子報」 | Clelereve Blog