# Send Engine(發送引擎) 此專案為獨立的發送引擎,負責寄送、節流、退信處理與追蹤。文件統一放在 `docs/`。 ## 目標(MVP) - 接收 Member Center 的訂閱事件(activated / unsubscribed / preferences.updated) - 多租戶名單快照(依 tenant/list)且僅增量更新 - 管理 Campaign / Send Job 與排程 - 對接 ESP(Amazon SES + Mock) - 記錄投遞結果與退信(必要時回寫 Member Center) ## 既定條件 - 與 Member Center 相同框架(C# .NET Core) - Send engine 不提供跨租戶名單查詢 - 事件同步採 event/queue 或 webhook(二擇一即可) - DB:PostgreSQL ## 範圍(第一階段) - 事件 ingest 與名單增量同步 - Campaign / Send Job 基本流程 - Sender Adapter(至少一種 ESP) - 投遞與退信記錄 - SES 回流建議採 `Configuration Set -> SNS -> SQS -> Worker` ## 非目標(暫不處理) - 自建 SMTP server - 跨租戶名單查詢 - 行銷自動化或行為追蹤 ## 文件 - `docs/DESIGN.md`:系統設計總覽、核心模組與資料流 - `docs/FLOWS.md`:主要業務流程(同步、寄送、退信) - `docs/OPENAPI.md`:API 規格說明與補充規則 - `docs/SCHEMA.sql`:資料庫 schema(PostgreSQL) - `docs/TECH_STACK.md`:技術棧與選型 - `docs/INSTALL.md`:安裝、初始化與維運指令 - `docs/USE_CASES.md`:需求用例(角色、情境、驗收) ## 專案結構 ```text mass_mail_engine/ ├── src/ │ ├── SendEngine.Api/ # REST API(事件 ingest、送信、管理 API) │ ├── SendEngine.Installer/ # 安裝與初始化 CLI(migrate/init/admin) │ ├── SendEngine.Application/ # 應用層介面與 DTO │ ├── SendEngine.Infrastructure/# EF Core、ESP Adapter、服務實作 │ └── SendEngine.Domain/ # 領域實體與常數 ├── docs/ # 專案文件 ├── .vscode/ # 本機開發啟動與工作設定 ├── SendEngine.sln # Solution └── README.md ``` ## Build 使用 VS Code `Run Build Task`(預設執行 `dotnet build SendEngine.sln`)。 ## 目前待辦 - SES/SNS 簽章完整驗證(目前 `Ses__SkipSignatureValidation=false` 僅檢查 header 存在) - 事件重試/DLQ 策略補強(目前主要依 SQS redrive policy) - recipient 狀態機擴充(delivery/open/click 的完整優先序與狀態轉換) - 與 Member Center 對齊並同步可讀的 list 名稱(避免 auto-created `list-{uuid}` 成為最終顯示) - SES 郵件 header 補 `List-ID`(優先使用同步後的 list 名稱),避免 Gmail 取消訂閱視窗顯示 `(Unknown)`