平衡点
2022/06/30
_ mbsync, msmtp with OAuth2
やりたくなかったけど, KUMOI(京大の学生・非常勤用メール, Office365)が OAuth2 じゃないとアクセスできなくなったッポイので, しぶしぶ移行を試したり.
(2022/06/30 19:22追記: 職場の Office365 も OAuth2 に移行との由. まあそうなるわな).
OAuth2 での認証
選択肢は幾つかある
- pdobsan/mailctl: Haskel. OAuthの認証管理. 鍵の暗号化は GnuPG or gnome-keyring(libsecrets?)
- oauth2token: python3. 安直に Get する感じかな. 暗号化は無い.
- mutt_oauth2.py: python3. 名前の通り mutt のツール. 鍵の暗号化は GnuPG
導入が楽なのは oauth2token かなぁ. mailctlも便利そう. そのうち乗り換えるかも.
ツールの導入と設定
isync/mbsync
が古いと "PassCmd" の文字列制限があるので XOAuth2
が使えない.
今手元にある 1.4.4
では問題無いが, 古い場合には更新するかパッチを当てる必要がある.
認証に xoauth2
が使える用に moriyoshi/cyrus-sasl-xoauth2 を導入しておく.
- これ, tarickb/sasl-xoauth2 とどっちが良いのかな.
oauth2token
の導入は
$ pip3 install --user oauth2token
としておく. ~/.local/bin
以下に oauth2create
, oauth2get
などが導入される.
設定ファイルの置き場所は $XDG_CONFIG_HOME/oauth2token/<provider>/
で,
ここに config.json
と scopes.json
を置いておく.
Googleの場合: config.json
は以下の通り
{
"web": {
"client_id": "<your client id>",
"client_secret": "<your client secret>",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://www.googleapis.com/oauth2/v3/token"
}
}
scopes.json
は
["https://mail.google.com/"]
で良い.
Office365の場合: config.json
は以下の通り
{
"web": {
"client_id": "<your client id>",
"client_secret": "<your client secret>",
"auth_uri": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
"token_uri": "https://login.microsoftonline.com/common/oauth2/v2.0/token"
}
}
scopes.json
は
["https://outlook.office.com/IMAP.AccessAsUser.All", "https://outlook.office.com/SMTP.Send"]
で良い.
初回の認証は
$ oauth2create <provider> アカウント名
で, ブラウザが起動するので適宜認証する.
認証情報は
$ oauth2get <provider> アカウント名
で取得できるので, これを ~/.mbsyncrc
の PassCmd
や ~/.msmtprc
の passwordeval
に渡せば良い.
例えば ~/.mbsyncrc
では
IMAPAccount gmail
Host imap.gmail.com
User <your gmail address>
AuthMech XOAUTH2
PassCmd "~/.local/bin/oauth2get google <your gmail address>"
Port 993
SSLType IMAPS
SSLVersions TLSv1.2
CertificateFile /etc/ssl/certs/ca-certificates.crt
とか ~/.msmtprc
では
# gmail
account gmail
host smtp.gmail.com
from <your gmail address>
domain gmail
port 587
tls on
tls_starttls on
auth xoauth2
user <your gmail address>
passwordeval "~/.local/bin/oauth2get google <your gmail address>"
で良い.
まとめ
というわけで,
mbsync
と msmtp
を XOAuth2 に対応させてみた.
mailctl
なんかでは
client(id|secrets) の管理に GnuPG を使うことになっていて,
こっちの方が良いんだろうけど,
cron
とか systemd.timer
でどう扱えば良いのか試す余裕が無かったし,
手元のラップトップでしか使わないから, まあエエか, としておく.
2022/06/30 19:22追記: suspend→resumeしたら, 再度 authorize から始まってしまった.
試しに mutt_oauth2.py
を使ってみたら特に問題が無いみたいなので,
とりあえずこっちに乗り換えることに.
上記内容はあとで書き直すかもしれない.