NeomuttでGmailにOAuth2.0する
更新しました
https://qiita.com/ksuzuki_TVDn1/items/e90a93862c382d7cd67f
TL;DR
- GmailでIMAP/POPの基本認証が使えなくなる
- neomuttはOAuth対応済み
- 設定すれば使える
まえがき
皆さんご承知おきのとおり、Office365とGSuiteでPOP/IMAPの基本認証が使えなくなります。(知りませんでしたが)
- https://support.microsoft.com/ja-jp/help/4521831/exchange-online-deprecating-basic-auth
- https://gsuiteupdates-ja.googleblog.com/2019/12/g-suite_24.html
GSuiteでメールが受信できなくなると、仕事のメールが受信できなくなってしまうため、とても困ります。
OAuth対応のメールクライアントなら何でも良いらしいので、こっそりOAuth対応していたmuttでの対応方法を書きます。
手順
GsuiteでOAuthクライアントIDを作成する
1. 以下のURLを開き、Google Cloud PlatformのAPIサービス設定を開きます。
2. [新しいプロジェクト]を作成から、mutt用のプロジェクトを作成します。
Google Cloud Platformのロゴの右側あたりの「▷hogehoge▽」の部分を押すと作れました。
- いい感じの画像が取れなかったのでテキストでなんとか…
3. [認証情報を作成]から、「OAuth 2.0 クライアント ID」を作成します
4. 適当な識別名を入力します。(管理上の問題だけなので何でも良いです)
5. 作成が完了すると、以下のような画面が表示されます。
以上でGSuite側の手順は終わりです。
実際にOAuthでの認可を行う
1. 以下のURLからスクリプトをダウンロード
https://github.com/google/gmail-oauth2-tools/blob/master/python/oauth2.py
- python2で書かれていて不便なので誰か3になおしてください。
APIバージョンも古く動かなくなったので、なおしました (https://github.com/ksuzukiTVDn1/gmail-oauth2-tools/blob/master/python/oauth2.py)
2. スクリプトを実行し、OAuthを実行
/usr/bin/python2 oauth2.py \
--user=<Gmailのアドレス> \
--client_id=<「OAuthクライアントを作成しました」の画面のクライアントID> \
--client_secret=<「OAuthクライアントを作成しました」の画面のクライアントシークレット> \
--generate_oauth2_token
3. 以下のような遷移先のURLが表示されるので、ブラウザに入力する
To authorize token, visit this url and follow the directions:
https://accounts.google.com/o/oauth2/auth?client_id=~~~
4. 認可を求められるので許可
5. 許可をすると、文字列が表示されるので、出てきた内容をコンソールに入力
Enter verification code:<出力された文字列を入力>
6. OAuthのリフレッシュトークン、アクセストークンが表示される
Refresh Token:
Access Token:
Access Token Expiration Seconds: 3599
muttrcでの設定
1. 以下のようにファイルを配置します。
┬ .mutt
├ muttrc
└ oauth2.py
2. muttrcで接続設定を以下のように変更します。
set imap_authenticators="oauthbearer"
set imap_oauth_refresh_command="/usr/bin/python2 ~/.mutt/oauth2.py \
--quiet \
--user=<Gmailのアドレス> \
--client_id=<「OAuthクライアントを作成しました」の画面のクライアントID> \
--client_secret=<「OAuthクライアントを作成しました」の画面のクライアントシークレット> \
--refresh_token=<コンソールでの操作で表示された、6.のリフレッシュトークン>"
set smtp_authenticators="oauthbearer"
set smtp_oauth_refresh_command="/usr/bin/python2 ~/.mutt/oauth2.py \
--quiet \
--user=<Gmailのアドレス> \
--client_id=<「OAuthクライアントを作成しました」の画面のクライアントID> \
--client_secret=<「OAuthクライアントを作成しました」の画面のクライアントシークレット> \
--refresh_token=<コンソールでの操作で表示された、6.のリフレッシュトークン>"
3. おまけ
ClientID, ClientSecret, RefreshTokenについては、GnuPGで暗号化するとなお安心です。
暗号化のやりかたは以下の通り。(GnuPGが設定済みの前提)
cat oauth_token
set imap_oauth_refresh_command="/usr/bin/python2 ~/.mutt/oauth2.py \
--quiet \
--user=<Gmailのアドレス> \
--client_id=<「OAuthクライアントを作成しました」の画面のクライアントID> \
--client_secret=<「OAuthクライアントを作成しました」の画面のクライアントシークレット> \
--refresh_token=<コンソールでの操作で表示された、6.のリフレッシュトークン>"
set smtp_oauth_refresh_command="/usr/bin/python2 ~/.mutt/oauth2.py \
--quiet \
--user=<Gmailのアドレス> \
--client_id=<「OAuthクライアントを作成しました」の画面のクライアントID> \
--client_secret=<「OAuthクライアントを作成しました」の画面のクライアントシークレット> \
--refresh_token=<コンソールでの操作で表示された、6.のリフレッシュトークン>"
gpg -r <uid> -e oauth_token
shred oauth_token
rm oauth_token
source "gpg -d ~/.mutt/oauth_token.gpg |"