## 目标 - 配置并启用阿里企业邮箱 SMTP,完成服务端发送邮件功能验证(含附件/远程文件)。 ## 所需配置 - 配置项位置:`app/settings/config.py:103-109`(`SMTP_HOST/SMTP_PORT/SMTP_USERNAME/SMTP_PASSWORD/SMTP_TLS/SMTP_FROM`) - 建议取值(不要写入仓库,使用环境变量注入): - `SMTP_HOST=smtp.qiye.aliyun.com` - `SMTP_PORT=465`(SSL 直连) - `SMTP_TLS=false`(465 对应 SSL;如用 587 则改为 `SMTP_TLS=true` 并 `SMTP_PORT=587`) - `SMTP_FROM=value@cdcee.net` - `SMTP_USERNAME=value@cdcee.net` - `SMTP_PASSWORD=<授权码>`(你提供的授权码) - 安全要求:不将授权码写入代码或仓库;仅通过环境变量或部署系统秘密管理器设置。 ## 实现检查 - 发送实现:`app/services/email_client.py:12-49` - 当 `SMTP_TLS=false` 时使用 `SMTP_SSL(host, 465)`;为 `true` 时使用 `SMTP(host, 587).starttls()` - 发送成功返回 `{status: 'OK'}`,失败返回 `{status: 'FAIL', error}` - 接口:`POST /api/v1/transactions/send-email`(`app/api/v1/transactions/transactions.py:62-104`) - 支持直接上传附件(`file`)或通过 `file_url` 拉取远程文件,记录日志到 `email_send_log` ## 验证步骤 1. 获取后台 token:`POST /api/v1/base/access_token`(admin 账号) 2. 发送纯文本邮件(无附件): - `POST /api/v1/transactions/send-email`,JSON:`{email, subject, body}`,携带 `token` 头 3. 发送带附件(file_url): - JSON:`{email, subject, body, file_url: 'https://...'}`;或使用 `multipart/form-data` 上传 `file` 4. 结果期望:返回 `{"status":"OK","log_id":...}`;失败时查看错误内容并修正配置。 ## 可选增强 - 为 `email_client.send` 增加更明确的错误分类与超时提示(保留现有结构)。 - 提供健康检查端点:尝试建立 SMTP 连接并返回诊断信息(仅管理员角色可访问)。 ## 回滚与安全 - 变更仅在环境变量层面,可随时回滚;不改代码,不提交授权码。 - 若切换至 587,需同时改为 `SMTP_TLS=true` 并确保上游网络允许 STARTTLS。