commune-dev/commune

GitHub: commune-dev/commune

面向 AI 智能体的开源邮件基础设施,提供程序化收发、安全检测和智能处理能力。

Stars: 4 | Forks: 0

# Commune 后端 面向 AI 智能体的开源邮件基础设施。以编程方式接收、发送和处理邮件,内置安全性、加密和送达管理功能。 **[架构](./ARCHITECTURE.md)** · **[API 参考](./docs/PUBLIC_API.md)** · **[安全性](./docs/security/)** ## 功能介绍 Commune 为 AI 智能体系统处理完整的邮件生命周期: - **入站处理** — 通过 Resend webhooks 接收邮件,具备垃圾邮件检测、提示词注入分析、附件扫描和结构化数据提取功能 - **出站发送** — 发送邮件时自动处理线程、收件人验证、抑制列表管理以及符合 RFC 标准的邮件头 - **送达追踪** — 处理退信、投诉和送达事件,并自动管理抑制列表 - **Webhook 转发** — 将处理后的邮件投递到您的端点,支持 HMAC-SHA256 签名、指数退避重试和熔断器 - **静态加密** — 对所有邮件内容、主题、参与者和附件使用 AES-256-GCM 字段级加密 - **实时通知** — 向已连接的仪表盘客户端推送 WebSocket 消息 ## 前置条件 - **Node.js** 18+ - **MongoDB** (本地或托管 — 例如 MongoDB Atlas) - **Resend 账户**,包含 API 密钥和至少一个已验证的域名 - **Redis** (可选 — 回退到内存模式用于速率限制和缓存) ## 快速开始 ### 1. 克隆并安装 ``` cd backend npm install ``` ### 2. 配置环境 ``` cp .env.example .env ``` 编辑 `.env` 文件并填入您的值。最少需要配置的变量: ``` # Database MONGO_URL=mongodb://localhost:27017/commune # Email provider RESEND_API_KEY=re_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Authentication (generate a strong random string, ≥32 chars) JWT_SECRET=your-secure-random-string-at-least-32-characters # Encryption at rest (generate with: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))") EMAIL_ENCRYPTION_KEY=64-hex-character-key-here # Public URL for webhook callbacks PUBLIC_WEBHOOK_BASE_URL=https://your-backend-url.com # Frontend URL (for email verification links) FRONTEND_BASE_URL=http://localhost:3000 ``` ### 3. 运行 ``` # Development (with hot reload via ts-node) npm run dev # Production npm run build npm start ``` 服务器将在端口 8000 上启动 (可通过 `PORT` 配置)。 ### 4. 验证 ``` curl http://localhost:8000/health # {"status":"ok"} ``` ## API 结构 后端提供两组 API 接口: ### 仪表盘 API (`/api/*`) 由前端仪表盘使用。通过 JWT 认证 (来自 `/auth/signin` 的 Bearer token)。 | Endpoint | Purpose | |----------|---------| | `POST /auth/signup` | 创建组织 + 用户,发送验证邮件 | | `POST /auth/verify` | 使用 token 验证邮箱 | | `POST /auth/signin` | 登录,返回 JWT | | `POST /api/domains` | 创建域名 | | `POST /api/domains/:id/verify` | 验证域名 DNS 记录 | | `POST /api/domains/:id/inboxes` | 在域名上创建收件箱 | | `POST /api/email/send` | 发送邮件 | | `GET /api/messages` | 查询消息 | ### 公共 API (`/v1/*`) 由 SDK 和外部集成使用。通过 API 密钥认证 (创建密钥时获取的 Bearer token)。 | Endpoint | Purpose | |----------|---------| | `POST /v1/messages/send` | 发送邮件 | | `GET /v1/threads` | 列出会话线程 | | `GET /v1/threads/:id/messages` | 获取线程中的消息 | | `GET /v1/domains` | 列出域名 | | `POST /v1/domains/:id/inboxes` | 创建收件箱 | | `GET /v1/delivery/metrics` | 投递统计 | | `GET /v1/delivery/events` | 投递事件历史 | | `GET /v1/search` | 跨消息的语义搜索 | 完整 API 参考请参阅 [docs/PUBLIC_API.md](./docs/PUBLIC_API.md)。 ## 域名设置 1. 创建域名:使用 `{ "name": "mail.yourdomain.com" }` 调用 `POST /api/domains` 2. 响应中包含需要在 DNS 提供商处添加的 DNS 记录 (MX, SPF, DKIM) 3. 验证:调用 `POST /api/domains/:id/verify` — 检查 DNS 传播情况 4. 创建收件箱:使用 `{ "localPart": "support", "displayName": "Support Agent" }` 调用 `POST /api/domains/:id/inboxes` 现在,发送至 `support@mail.yourdomain.com` 的入站邮件将被处理并转发至您的 webhook 端点。 ## Webhook 集成 为您的收件箱配置 webhook 以接收处理后的邮件: ``` POST /api/domains/:domainId/inboxes/:inboxId/webhook { "endpoint": "https://your-app.com/webhooks/email" } ``` 每封入站邮件都会作为带签名的 POST 请求投递到您的端点,包含以下标头: | Header | Value | |--------|-------| | `x-commune-signature` | `v1={HMAC-SHA256(secret, "{timestamp}.{body}")}` | | `x-commune-timestamp` | Unix 毫秒时间戳 | | `x-commune-delivery-id` | 唯一投递 ID | | `x-commune-attempt` | 尝试次数 (1-8) | 请求载荷包含完整的消息、附件元数据、垃圾邮件分析和提示词注入分析。验证示例请参阅 [docs/security/webhook-signatures.md](./docs/security/webhook-signatures.md)。 ## 结构化数据提取 使用 AI 从邮件中提取结构化 JSON 数据。在您的收件箱上配置 JSON Schema: ``` PUT /api/domains/:domainId/inboxes/:inboxId/extraction-schema { "name": "invoice_extraction", "description": "Extract invoice details from emails", "enabled": true, "schema": { "type": "object", "properties": { "invoiceNumber": { "type": "string" }, "amount": { "type": "number" }, "dueDate": { "type": "string" } }, "required": ["invoiceNumber", "amount"] } } ``` 提取的数据会出现在 webhook 载荷的 `extractedData` 字段中,以及存储消息的 `metadata.extracted_data` 字段下。提取功能具备会话感知能力 —— 它使用完整的线程上下文来处理多轮邮件链。需要在环境中配置 `AZURE_OPENAI_ENDPOINT`、`AZURE_OPENAI_API_KEY` 和 `AZURE_OPENAI_DEPLOYMENT`。 ## 安全性 安全性架构在 [ARCHITECTURE.md](./ARCHITECTURE.md) 中有详细记录。主要亮点包括: - **静态加密** — AES-256-GCM 字段级加密,支持密钥轮换和三层密钥保护 (指纹锁、解密金丝雀、启动熔断) - **入站威胁检测** — 5 层垃圾邮件检测、提示词注入分析 (5 个信号类别)、ClamAV + 启发式附件扫描 - **送达保护** — 每个组织的发送健康熔断器 (退信/投诉率监控)、14 天域名预热计划、自动抑制列表管理 - **API 安全** — Bcrypt 哈希 API 密钥、JWT 认证、滑动窗口速率限制 (Redis + Lua)、带自动过期的审计日志 - **传输安全** — HSTS、通过 Helmet 的安全标头、Svix webhook 签名验证、带时间安全比较的 HMAC 签名出站 webhooks 有关每个安全子系统的详细文档,请参阅 [docs/security/](./docs/security/) 目录。 ## 环境变量 | Variable | Required | Description | |----------|----------|-------------| | `MONGO_URL` | 是 | MongoDB 连接字符串 | | `RESEND_API_KEY` | 是 | Resend API 密钥 | | `JWT_SECRET` | 是 (生产环境) | JWT 签名密钥 (≥32 字符) | | `EMAIL_ENCRYPTION_KEY` | 是 (生产环境) | 用于 AES-256-GCM 的 64 个十六进制字符 | | `PUBLIC_WEBHOOK_BASE_URL` | 是 | 用于 Resend webhook 回调的公开 URL | | `FRONTEND_BASE_URL` | 是 | 用于验证邮件的前端 URL | | `REDIS_URL` | 否 | 用于速率限制的 Redis (回退到内存模式) | | `AZURE_OPENAI_ENDPOINT` | 否 | 用于结构化提取的 Azure OpenAI | | `AZURE_OPENAI_API_KEY` | 否 | Azure OpenAI 密钥 | | `AZURE_OPENAI_DEPLOYMENT` | 否 | Azure OpenAI 部署名称 | | `CLOUDINARY_CLOUD_NAME` | 否 | 用于附件存储的 Cloudinary | | `CLOUDINARY_API_KEY` | 否 | Cloudinary API 密钥 | | `CLOUDINARY_API_SECRET` | 否 | Cloudinary 密钥 | | `CLAMAV_HOST` | 否 | 用于附件扫描的 ClamAV 守护进程 | | `QDRANT_URL` | 否 | 用于向量搜索的 Qdrant | 完整列表及说明请参阅 `.env.example`。 ## 构建 ``` npm run build # Compiles TypeScript to dist/ npm start # Runs the compiled server ``` ## 生态系统 | Package | Description | |---------|-------------| | **[commune](https://github.com/shanjai-raj/commune)** | **邮件 & SMS 基础设施 — 可自托管后端** | | [commune-ai](https://github.com/shanjai-raj/commune-ai) | TypeScript/Node.js SDK | | [commune-python](https://github.com/shanjai-raj/commune-python) | Python SDK | | [commune-mcp](https://github.com/shanjai-raj/commune-mcp) | 用于 Claude Desktop, Cursor, Windsurf 的 MCP 服务器 | | [commune-cli](https://github.com/shanjai-raj/commune-cli) | 命令行界面 | ## 许可证 Apache License 2.0 — 详见 [LICENSE.md](./LICENSE.md)。
标签:AES-256, AI 基础设施, BullMQ, GNU通用公共许可证, MITM代理, MongoDB, Node.js, Redis, SMS 网关, Webhook 分发, 向量搜索, 垃圾邮件检测, 开源, 提示词注入检测, 搜索引擎查询, 漏洞评估, 电子邮件 API, 程序化收件箱, 自动化攻击, 自托管, 通信平台, 邮件基础设施, 邮件安全, 静态加密