aws-email-check: only report ban-risk mails (suspension/abuse/suspicious activity)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-23 15:42:51 +08:00
co-authored by Claude Sonnet 5.5
parent 5db6f351cd
commit ce0eaa9e95
3 changed files with 256 additions and 113 deletions
+6 -2
View File
@@ -1,6 +1,6 @@
---
name: aws-email-check
description: 读取当天新到的 AWS 账号风控邮件,过滤登录验证码和资源访问请求验证成功通知、去重并按中文字段顺序汇报已提取的风险与处理信息。适用于定时检查配置的 IMAP 邮箱。
description: 读取当天新到的 AWS 账号风控邮件,过滤登录验证码、资源访问请求验证成功及域名到期续费提醒,去重并按中文字段顺序汇报风险与处理信息。适用于定时检查配置的 IMAP 邮箱。
---
# AWS 账号风控邮件检查
@@ -11,10 +11,14 @@ description: 读取当天新到的 AWS 账号风控邮件,过滤登录验证
脚本仅检查 `timezone` 所设时区当天到达邮箱的邮件,以 IMAP `INTERNALDATE` 为准,而不是转发邮件引用的原始日期;使用邮箱 UIDVALIDITY + UID 及 Message-ID 持久去重。每小时重复调用同一命令即可。状态记录的是已扫描/已生成报告,不代表 AstrBot 消息已送达;有新报告时,脚本将其原文随去重状态保存,最多保留最近 48 次非空检查。普通检查不会自动重发,也不会用“无新增”覆盖历史。仅在确认某次发送失败且消息未送达时,可人工运行 `python scripts/check_mail.py --config config.json --list-report-batches` 定位批次 ID,再运行 `python scripts/check_mail.py --config config.json --replay-id BATCH_ID` 重放;最近一次也可用 `--replay-last`。维护命令不连接邮箱、不改变状态;重放报告的 stdout 应原样发给用户。若送达状态不确定,不得盲目重发。此机制不保证端到端 exactly-once 投递。
**只提醒可能导致封号的邮件**:必须有明确的封禁信号才生成提醒——账号受限/暂停/关闭、资源滥用或钓鱼报告、可疑活动、访问密钥泄露、要求提交身份核验材料。仅含 verify、验证、risk 等泛词的普通通知(如身份验证通知、证书/凭据到期)一律不提醒。
登录验证码、OTP 和一次性密码邮件不生成提醒,包括转发邮件、中英文及 HTML 邮件;异常活动提示、建议更换密码或启用 MFA 等验证码安全套话不会将其变成风控提醒。明确说明账号受限、暂停、关闭,或要求提交身份核验材料的真实风控通知仍保留,不能仅凭“验证”、verify 或 MFA 字样过滤。过滤邮件仍记录扫描去重,但不保存到报告历史。
“您访问 AWS 资源的请求已得到验证 / Your Request For Accessing AWS Resources Has Been Validated”这类资源访问请求验证成功通知也不生成提醒,支持中英文、转发及 HTML 邮件。同一邮件仍有明确的账号限制、暂停、关闭、访问密钥泄露、资源滥用或核验材料提交要求时保留提醒;不能泛化过滤所有包含 validated 或“验证”的邮件。
域名注册到期、续费提醒及续费失败通知不生成提醒,包括 Route 53 的 `[Domain expiring] Registration for … expires on …`,支持中英文、转发和 HTML 邮件,不限定域名或日期。只识别以域名注册或续费为主体的提醒,提到域名的证书、凭据过期邮件不属于此类。域名自动续费关闭、续费失败或域名因到期暂停属于业务状态;同一邮件包含明确的 AWS 账号限制、暂停、关闭、密钥泄露、资源滥用或身份核验材料提交要求时仍保留提醒。不能仅凭 domain、expires 或“续费”字样过滤;过滤邮件仍扫描去重,不保存到报告历史。
输出每封邮件按以下字段顺序排列,多封之间空一行。只展示有可信非空提取结果的字段;账号 ID、警告信息、涉及资源、要求操作、截止时间等任何缺失字段均整行省略,不输出空标签或 `未提取`,不猜测补齐。没有符合条件的新邮件时只输出固定的“无”行,不列出被过滤邮件或过滤详情。不输出任何访问密钥、授权码、密码或令牌。
```text
@@ -33,4 +37,4 @@ AWS账号ID:...
今日无新增AWS账号风控邮件。
```
当前工作区有 `参考邮件` 目录时,本地样本验证可用 `python scripts/check_mail.py --eml-dir 参考邮件 --date 2026-09-28`;`过滤邮件` 中的验证码和资源访问请求验证成功样本也可用同一命令指定目录和对应日期验证。本地模式不读取或改写生产去重状态;这两个目录含真实邮件,不纳入版本控制。离线回归测试使用 `python -m unittest discover -s tests -v`,真实样本目录缺失时相应样本测试跳过,合成邮件测试仍完整运行。
当前工作区有 `参考邮件` 目录时,本地样本验证可用 `python scripts/check_mail.py --eml-dir 参考邮件 --date 2026-09-28`;`过滤邮件` 中的验证码、资源访问请求验证成功和域名到期样本也可用同一命令指定目录和对应日期验证,新增域名到期样本的邮件日期为 `2026-10-10`。本地模式不读取或改写生产去重状态;这两个目录含真实邮件,不纳入版本控制。离线回归测试使用 `python -m unittest discover -s tests -v`,真实样本目录缺失时相应样本测试跳过,合成邮件测试仍完整运行。