Clacks
上线旧版账户的邮件桥接
"重要的不是消息本身,而是发送它。"
— GNU Terry Pratchett
一个基于Symfony的应用程序,将POP3和IMAP邮箱账户桥接到Gmail。轮询旧版邮件服务器,安全地将消息直接转发到您的Gmail收件箱——无存储、无延迟,只有与过滤器和规则完全兼容的无缝投递。
主要功能
- POP3 & IMAP支持
- 基于纯PHP套接字的轮询,无需ext-imap依赖
- Gmail API集成
- 使用Gmail messages.import实现原生过滤器兼容性
- 安全直通
- 邮件内容直接传入 Gmail,从不存储
- 多账户管理
- 将多个旧版账户连接到一个或多个Gmail目标
- AdminLTE仪表板
- 用于账户管理和监控的现代Web界面
技术栈
案例研究
- 问题
- 把旧的 POP3 和 IMAP 邮箱中的邮件导入 Gmail,让 Gmail 自身的过滤器、标签和垃圾邮件识别照常生效——就像邮件原本就直接投递到了 Gmail。
- 我的角色
- 由我设计、构建并运维:邮件客户端、Gmail 集成、凭据加密、任务调度以及付费方案。
- 约束
- 它需要的每一项 Gmail 权限都被 Google 列为受限权限,这意味着要通过安全审核,并且必须为申请的每一项权限说明理由。此外,一个接触他人邮件的服务,应当尽可能少地保留邮件。
- 决策
- 导入而非转发:邮件通过 Gmail 的 messages.import 进入,过滤器和垃圾邮件识别照常运作。只申请五项范围很窄的权限,并刻意不申请 gmail.readonly——应用从不读取任何已有的 Gmail 邮件。不保留邮件内容:邮件在一次处理中完成拉取和导入,只保留元数据——发件人、主题、日期以及防止重复导入的标识符——并按保留期限清除。POP3 和 IMAP 客户端直接基于套接字编写,而不依赖 PHP 的 IMAP 扩展。必须存储的密钥信息,例如邮箱密码和 Gmail 刷新令牌,则用密钥加密密钥进行加密。
- 取舍
- 导入需要受限权限,而受限权限会带来 Google 的审核。转发本可以避开这两者——但也会破坏过滤器和标签,而那恰恰是整件事的意义所在。
- 结果
- 一项正在运行的服务,提供免费和付费方案,将 POP3 和 IMAP 邮箱连接到一个或多个 Gmail 收件箱。
- 依据
- 每一项受限权限都对照使用它的具体 API 调用写有文档,并且在正式评估之前,代码已按照 Google 的 CASA Tier 2 标准核查过。