Clacks
公開中レガシーアカウント向けメールブリッジ
"大切なのはメッセージではない。それを送ることだ。"
— GNU Terry Pratchett
POP3およびIMAPメールアカウントをGmailに接続するSymfonyベースのアプリケーションです。レガシーメールサーバーをポーリングし、メッセージを安全にGmailの受信トレイに直接転送します。保存なし、遅延なし、フィルターとルールの完全な互換性を備えたシームレスな配信です。
主な機能
- POP3 & IMAPサポート
- ext-imap依存なしの純粋なPHPソケットベースのポーリング
- Gmail API統合
- ネイティブフィルター互換性のためにGmail messages.importを使用
- セキュアパススルー
- メッセージ本文はそのまま Gmail に渡り、保存されることはありません
- マルチアカウント管理
- 複数のレガシーアカウントを1つまたは複数のGmail宛先に接続
- AdminLTEダッシュボード
- アカウント管理とモニタリングのための最新のWeb UI
テックスタック
ケーススタディ
- 課題
- 古い POP3 / IMAP アカウントのメールを Gmail に取り込み、Gmail 自身のフィルタ、ラベル、迷惑メール判定がそのまま効くようにする――最初から Gmail に届いたかのように。
- 私の役割
- 設計、開発、運用のすべてを担っています。メールクライアント、Gmail 連携、認証情報の暗号化、スケジューリング、有料プランまで。
- 制約
- 必要な Gmail の権限は、いずれも Google が「制限付き」に分類しています。そのためセキュリティ審査があり、要求する権限ひとつひとつの正当性を説明する義務があります。さらに、他人のメールを扱うサービスは、保持するデータを極力少なくすべきです。
- 判断
- 転送ではなくインポート:Gmail の messages.import でメールを取り込むので、フィルタや迷惑メール判定は通常どおり働きます。権限は用途を絞った 5 つだけを要求し、gmail.readonly はあえて要求しません――アプリが既存の Gmail メッセージを読むことはないからです。メッセージ本文は保持しない:メールは 1 回の処理で取得してインポートし、残すのは差出人・件名・日時と重複取り込みを防ぐ識別子といったメタデータだけで、それも保持期間に従って削除します。POP3 / IMAP クライアントは PHP の IMAP 拡張に頼らず、素のソケットで実装しました。どうしても保存が必要な秘密情報――メールボックスのパスワードや Gmail のリフレッシュトークン――は、鍵暗号化鍵のもとで暗号化します。
- トレードオフ
- インポートには制限付き権限が必要で、それには Google の審査が伴います。転送ならどちらも避けられましたが、そもそもの目的だったフィルタとラベルが機能しなくなります。
- 結果
- 無料プランと有料プランを備え、POP3 / IMAP アカウントを 1 つ以上の Gmail 受信トレイにつなぐ、稼働中のサービス。
- 裏付け
- 制限付き権限はそれぞれ、それを使う具体的な API 呼び出しと対応づけて文書化しており、コードは正式な評価に先立って Google の CASA Tier 2 基準に照らして確認済みです。