平衡点


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 を導入しておく.

oauth2token の導入は

$ pip3 install --user oauth2token

としておく. ~/.local/bin 以下に oauth2create, oauth2get などが導入される.

設定ファイルの置き場所は $XDG_CONFIG_HOME/oauth2token/<provider>/ で, ここに config.jsonscopes.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> アカウント名

で取得できるので, これを ~/.mbsyncrcPassCmd~/.msmtprcpasswordeval に渡せば良い.

例えば ~/.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>"

で良い.

まとめ

というわけで, mbsyncmsmtp を XOAuth2 に対応させてみた. mailctl なんかでは client(id|secrets) の管理に GnuPG を使うことになっていて, こっちの方が良いんだろうけど, cron とか systemd.timer でどう扱えば良いのか試す余裕が無かったし, 手元のラップトップでしか使わないから, まあエエか, としておく.

2022/06/30 19:22追記: suspend→resumeしたら, 再度 authorize から始まってしまった. 試しに mutt_oauth2.py を使ってみたら特に問題が無いみたいなので, とりあえずこっちに乗り換えることに. 上記内容はあとで書き直すかもしれない.


連絡先など
最近の日記
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|
Back to Top ▲