定时收取特定邮箱邮件,将其内容通过 X API 发布为推文,并回执处理结果。
[NEWS] 邮件 → 解析 → 校验 → 上传媒体 → 发单条推文 → 回执
[ARTICLE] 邮件 → 解析 → 校验 → 上传媒体
├─ ≤280 字 → 发单条推文 → 回执
└─ >280 字 → AI 改写 → 推文串 → 回执
推文串格式:首条为引子,中间以 ⬇️ 结尾,最后以 🔚 收尾。
- Python 3.9+
- Linux (AlmaLinux/CentOS/Ubuntu)
git clone <repo-url>
cd Mail2Tweet
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtcp .env.example .env
chmod 600 .env
# 编辑 .env 填入凭据Azure AD 设备码授权,用于 IMAP/SMTP XOAUTH2 登录:
./venv/bin/python setup_oauth.py
# 打开输出的 URL,输入代码,完成授权Token 保存在 data/tokens.json,会自动刷新。
crontab -e
# 每天两次:UTC 13:00(美东 9 AM)和 UTC 21:00(美东 5 PM)
# X 流量峰值时段
0 13,21 * * * /usr/bin/flock -n /tmp/mail2tweet.lock /path/to/venv/bin/python /path/to/main.py上游 AI 系统发送的邮件必须为纯文本(text/plain),UTF-8 编码。
| 前缀 | 行为 | 超长处理 |
|---|---|---|
[NEWS] |
直接发单条推文 | 报 CONTENT_TOO_LONG |
[ARTICLE] |
≤280 直接发;>280 AI 拆分推文串 | AI 自动拆分 |
附件可选:最多 4 张图片(JPEG/PNG/GIF/WEBP)或 1 个视频(MP4/MOV)。
详见 邮件格式规范。
| 代码 | 含义 |
|---|---|
| SUCCESS | 推文已发布 |
| CONTENT_TOO_LONG | 正文超长([NEWS]) |
| MEDIA_UNSUPPORTED | 附件格式不支持 |
| MEDIA_COUNT_EXCEEDED | 附件数量超限 |
| MEDIA_UPLOAD_FAILED | 媒体上传失败 |
| TWEET_FAILED | 发推失败 |
| THREAD_FAILED | 推文串发布失败 |
| AI_FAILED | AI 服务不可用 |
| AI_OUTPUT_INVALID | AI 返回格式异常 |
| DAILY_LIMIT_REACHED | 当日配额用尽 |
| PARSE_ERROR | 邮件格式无法解析 |
| OTHER_ERROR | 其他错误 |
./venv/bin/python -m unittest discover tests -v