LoginSignup
4
4

More than 1 year has passed since last update.

NeomuttでGmailにOAuth2.0する

Last updated at Posted at 2020-03-11

NeomuttでGmailにOAuth2.0する

更新しました 
https://qiita.com/ksuzuki_TVDn1/items/e90a93862c382d7cd67f

TL;DR

  1. GmailでIMAP/POPの基本認証が使えなくなる
  2. neomuttはOAuth対応済み
  3. 設定すれば使える

まえがき

皆さんご承知おきのとおり、Office365とGSuiteでPOP/IMAPの基本認証が使えなくなります。(知りませんでしたが)

GSuiteでメールが受信できなくなると、仕事のメールが受信できなくなってしまうため、とても困ります。
OAuth対応のメールクライアントなら何でも良いらしいので、こっそりOAuth対応していたmuttでの対応方法を書きます。

手順

GsuiteでOAuthクライアントIDを作成する

1. 以下のURLを開き、Google Cloud PlatformのAPIサービス設定を開きます。

2. [新しいプロジェクト]を作成から、mutt用のプロジェクトを作成します。

Google Cloud Platformのロゴの右側あたりの「▷hogehoge▽」の部分を押すと作れました。

  • いい感じの画像が取れなかったのでテキストでなんとか…
3. [認証情報を作成]から、「OAuth 2.0 クライアント ID」を作成します

001.png

4. 適当な識別名を入力します。(管理上の問題だけなので何でも良いです)

今回は[その他]-[linux]で作成しました。
002.png

5. 作成が完了すると、以下のような画面が表示されます。

003.png

以上で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. 認可を求められるので許可

004.png

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 |"
4
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4