はじめまして。peiii25です。
Qiita初投稿 & いえらぶGROUP Advent Calendar 2020 5日目 ということで緊張しておりますがお手柔らかにお願いします。
実装しようとした背景
2019年12月、Googleより安全性の低いアプリから、G suite(Google Workspace)アカウントへの接続の無効化予定が発表されました。
※2020年3月、コロナの影響により延期が発表されました。(https://gsuiteupdates-ja.googleblog.com/2020/04/blog-post.html)
自社システムでメーラーを提供しており、GoogleアカウントのIDとパスワードでサーバーに接続をする従来の方法では、今後自社システムから接続できなくなる未来が予想されます。
よって、GmailAPIを利用したメールの送受信を実装しようとしました。
Gmail APIを使うための準備
GmailAPIにはプッシュ通知機能が用意されています。これを実装するには
①Google Cloud PlatformでAPIの有効化
②OAuth認証設定
③Cloud Pub/Subでの設定
が必要になります。
①Google Cloud PlatformでAPIの有効化
APIの有効化を行うため、GCPで「プロジェクトの作成」を行い、GmailAPIとCloud Pub/Subを有効化します。
ここは手順が単純なため省略します。
②OAuth認証設定
ここでは大きく分けて2つやることがあります。
1.OAuth同意設定
GCPの左側のリスト「OAuth同意画面」で、自社システムから接続できるよう設定します。この時、GmailAPIの利用権限(スコープ)の選択をしないといけません。私はメールの送受信ができる権限https://www.googleapis.com/auth/gmail.modify
を選択しました。
2.OAuthクライアントID作成
自社システムからGmailAPIを利用する際にOAuth認証のためのリダイレクトURLを指定します。
③Cloud Pub/Subでの設定
Cloud Pub/Subとは何か、こちらを参考にしてください。
Cloud Pub/Subでトピックを作成し、サブスクリプションで配信先(今回で言うと自社システム)を設定します
各アカウントのメールボックスに変更(受信や既読など)があると、変更内容をCloud Pub/Subを経由して、自社システムに送信されるイメージです。
GCPでトピックとサブスクリプションを作成します。
この時、トピックに「gmail-api-push@system.gserviceaccount.com」をPub/Subパブリッシャーとしてロールを与えると、Gmailの変更をCloud Pub/Subに送信できます。
自社システム側の実装
自社システム側で、APIからのメッセージを取得するメソッドを作成し、メール受信の変更のみを取得するよう実装をします。
メールボックスにメールが受信されたら、即時で受信メールの内容を自社システムに送ることができ、自社システムに取り込みが可能になります。
いざ実装、と思ったら・・・
GmailAPIは、連携するWebアプリケーションがGoogleからOAuthの利用承認してもらわない限り機能が制限されるとのことでした。
また、承認には「第三者機関によるセキュリティチェック」が必要とのこと。
※費用感、承認までに期間などはこちらを参考にさせて頂きました。
上記により、すぐに実装はできないと判断し実装未遂となりました。
開発してみた所感
- GCPのサービスを社内でだれも触っていなかったため、Cloud Pub/Subについて身近に質問や相談できる人が少なく苦労しました。
- GmailAPIの実装記事が少ない印象でした。GmailAPIやGCPの設定が複雑であるため、まだ本格的に実装を検討しているWebアプリケーションの開発者があまりいないのかなと思いました。
おわりに
初めてQiitaに投稿させていただき、業務で培ったノウハウのアウトプットは自分の知識の整理になるな、と思う反面、さらに読みやすい記事にしていくため今後も精進していきます。
ご質問などあればコメントしていただければと思います。
最後まで読んで頂きありがとうございました。