Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Mail2Tweet

定时收取特定邮箱邮件,将其内容通过 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.txt

配置

cp .env.example .env
chmod 600 .env
# 编辑 .env 填入凭据

OAuth 授权(首次部署)

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

About

利用 Agent 写的小程序或者小工具

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages