- Introduced SqsSesPollerWorker to poll messages from SQS and process SES events. - Implemented SesEventProcessingService to handle SES event payloads and store them in the database. - Updated DevMockSenderWorker to support new SES sending methods and improved logging for unsubscribe headers. - Added AWS SDK for SQS to project dependencies.
61 lines
2.4 KiB
Markdown
61 lines
2.4 KiB
Markdown
# 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 的完整優先序與狀態轉換)
|