Gmail に届いた新着メールを検知し、LINE に即時通知するサーバーレスアプリケーションです。 未読メールを定期的にチェックし、新しいメールが届くと LINE に通知します。 一度通知したメールは重複して送らないように管理されています。
Google Cloud (GCP) を活用したサーバーレス構成です。
- 言語: Go (1.22)
- クラウド GCP(Cloud Run)
- 外部 API:
- Gmail API (メールの取得)
- LINE Messaging API (通知送信)
普段 LINE ばかり見ていて、Gmail の確認が遅れてしまう課題を解決するために作成しました。 スマホに標準で入っているメール通知よりも、使い慣れた LINE に流すことで、即座に内容を確認できるようにしました。
- リポジトリをクローン
- 必要な環境変数を
.envに設定GCP_PROJECT_ID=your-project-id LINE_CHANNEL_ACCESS_TOKEN=your-token LINE_USER_ID=your-user-id GMAIL_OAUTH_TOKEN_JSON={"type":"authorized_user","client_id":"...","client_secret":"...","refresh_token":"..."} - Cloud Functions にデプロイして実行
- Google Cloud Console で OAuth クライアント(デスクトップ)を作成し、
credentials.jsonを取得 - トークン生成
go run ./cmd/gmail-oauth
- 生成された
token.jsonの内容をGMAIL_OAUTH_TOKEN_JSONにセット (もしくはGMAIL_OAUTH_TOKEN_FILE=token.jsonを使う)
- Pub/Sub トピックを作成(例:
gmail-updates) - Gmail に Publish 権限を付与
- watch 登録
PUBSUB_TOPIC="projects/your-project-id/topics/gmail-updates" go run ./cmd/gmail-watch - Cloud Functions のトリガーを Pub/Sub に変更(関数名:
ProcessPubSubEvent)
- LINE Messaging APIでは、送信回数に対して月に200回までの上限が設けられている。なので他の通知方法を検討中。
- MailBriefという名前は、もともとメールの内容を要約した文章を送信するということで命名した。現状実現できていないが、今後AIによる要約機能も実装する予定。
- Webhookを用いて、ユーザーからのアクションを受け取る機能を実装したい。具体的に、通知メッセージの下に「既読にする」「返信案を作成」といったボタンを設置する。ボタンが押されたことを Webhook で検知し、Cloud Functions側で処理(Gmailの既読化APIを叩くなど)を行う。

