Gmail重要メール監視システム構築:OpenClawで実現する自動トリアージ
はじめに
複数のGoogleアカウントを使い分けていると、重要なメールを見落とすリスクが高まります。この記事では、OpenClawとGmail APIを使って重要メール自動監視システムを構築した経験を共有します。
システム概要
このシステムは以下の機能を持ちます:
- 複数Googleアカウント対応(クロスリンク・プログラミングスクール)
- ルールベースの重要度判定(High/Medium/Low/Ignore)
- SQLiteによる重複検出
- Cronジョブで15分間隔の自動チェック
- サイレントモード(重要メールのみ通知)
実装のポイント
Gmail API認証
OAuth2認証を使い、アカウントごとに独立したtokenファイルを管理します。
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
def authenticate_gmail(token_path, credentials_path):
creds = None
if os.path.exists(token_path):
creds = Credentials.from_authorized_user_file(token_path, SCOPES)
if not creds or not creds.valid:
flow = InstalledAppFlow.from_client_secrets_file(credentials_path, SCOPES)
creds = flow.run_local_server(port=0)
with open(token_path, 'w') as token:
token.write(creds.to_json())
return build('gmail', 'v1', credentials=creds)
重要度スコアリング
メールの特徴から重要度を数値化します:
- Human sender(+20点): 個人からのメール
- To field(+15点): Toフィールドに自分が含まれる
- Urgent keywords(+10点): 「至急」「締切」など
- Attachments(+10点): 添付ファイルあり
def calculate_importance_score(email_data):
score = 0
sender = email_data.get('from', '')
subject = email_data.get('subject', '')
# Human sender check
if not is_noreply_sender(sender):
score += 20
# Urgent keywords
urgent_keywords = ['至急', '緊急', '締切', 'URGENT']
if any(kw in subject for kw in urgent_keywords):
score += 10
# Attachments
if email_data.get('has_attachments'):
score += 10
return score
運用での工夫
サイレントモード
Cronジョブで動作する際、すべてのメールを通知すると spam になります。--silent フラグで重要メールのみ出力します。
python3 gmail_watcher.py --check --silent
再通知ロジック
同じメールを何度も通知しないよう、最終通知時刻を記録し、一定時間経過後のみ再通知します。
- High優先度: 2時間後
- Medium優先度: 24時間後
結果
64通のメールから7通の重要メールを自動抽出し、フィッシングメール1件も検出しました。15分間隔の自動チェックにより、見落としリスクが大幅に減少しました。
まとめ
Gmail APIとルールベース判定で、実用的なメール監視システムを構築できます。次のフェーズでは、LLM判定やプッシュ通知(Gmail Push API)の導入を検討中です。
関連記事:
– フィッシング検出の実装
– 複数Googleアカウント統合管理
– OpenClaw Cronジョブ活用術