もっと簡単にmu4eをMSのOAuth2に対応させる
以前、oauth2msというツールを使う方法を紹介しましたが、mutt_oauth2.pyを使うとそれよりずっと簡単でした。さらにoauth2msだといくら頑張っても個人向けのe-mailサービス(outlook.com, outlook.jp, hotmail.com など)がダメだったのですが、こちらの方はそれもあっさりできてしまいます。
mutt_oauth2.py の準備
mutt_oauth2.py をダウンロードして適当なパス (例: /usr/local/bin/) に実行権限付きで保存します。ソースコードを2箇所だけ書き換えます。<GPGの鍵指定>の部分は gpg コマンドで作った鍵のID (e-mailアドレス) を書いておきます。client_idの部分は以下のとおりの文字列を書くことで、mutt_oauth2.py に Thunderbird のフリをさせます。これによって (oauth2ms 等で必要だった) azure 側の面倒くさいアプリ登録等を回避できる仕組みのようです。
# 前略
ENCRYPTION_PIPE = ['gpg', '--encrypt', '--recipient', '<GPGの鍵指定>']
DECRYPTION_PIPE = ['gpg', '--decrypt']
registrations = {
'google': {
# google の設定いろいろ(中略)
},
'microsoft': {
# MS の設定いろいろ(中略)
'client_id': '9e5f94bc-e8a4-4e73-b8be-63364c29d753', # Thunderbird のフリをさせる
'client_secret': '', # 空のままで ok
},
}
# 後略
token ゲット
mutt_oauth2.py <トークンファイル> --authorize
と、コマンドを実行します。<トークンファイル> はトークンを保存しておくファイルで、アカウント毎に作ります。例えば ~/.mutt_token_hotmail とかそんな感じです。するとインタラクティブに続きます。
vailable app and endpoint registrations: google microsoft
OAuth2 registration: microsoft
まずは↑このように microsoft を選びます。
Preferred OAuth2 flow ("authcode" or "localhostauthcode" or "devicecode"): devicecode
Account e-mail address: ****@outlook.com
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code E*******H to authenticate.
Polling...............
続いて認証の方法、なんでも良いのですがコピペが少なめのdevicecodeを選択しました。そして自分のアカウントのe-mailアドレスを入力します。すると「https://microsoft.com/devicelogin を開いてデバイスコード入れろ」と言われるのでブラウザでそのURLを開き、認証ページで表示されたデバイスコードE*******Hを入力します。
mutt_oauth2.py <トークンファイル> と、--authorize なしで実行してトークン文字列がズラッと出てくればokです。
なお、トークンファイルのパーミションは 0600 のような安全なものにする必要があるようです。
msmtp の設定
.msmtprc(の一部)こんな感じです。msmtp -a hotmail foo@bar.com などとして送信できるかチェックしましょう。
account hotmail
host smtp-mail.outlook.com
port 587
from oreore@hotmail.com
user oreore@hotmail.com
passwordeval "mutt_oauth2.py ~/.mutt_token_hotmail"
auth xoauth2
mbsync (isync) の設定
.mbsyncrc(の一部)はこんな感じです。mbsync hotmail などとして同期できるかチェックしましょう。
IMAPAccount hotmail
PassCmd "mutt_oauth2.py ~/.mutt_token_hotmail"
Host imap-mail.outlook.com
User oreore@hotmail.com
SSLType IMAPS
AuthMechs XOAUTH2
CertificateFile /etc/ssl/certs/ca-certificates.crt
macOS の場合について補足
macOS (homebrew) で普通にインストールすると SASL が OAUTH2 に対応しておらず、 mbsync もよくわからないけれどそのあたりがなんだかおかしいので、それらを 自前でビルドする必要があります。
isync (わりと簡単)
-
homebrew で isync (mbsync) をインストールしてたらアンインストールしてください。
brew uninstall isyncでok. -
あとはだいたい次のような感じで ok です。
$ brew install autoconf automake cyrus-sasl
$ git clone https://git.code.sf.net/p/isync/isync
$ cd isync-isync
$ export LDFLAGS="-L/opt/homebrew/opt/cyrus-sasl/lib -L/opt/homebrew/opt/openssl@3/lib"
$ export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
$ sh ./autogen.sh
$ ./configure
$ make
$ sudo make install
sasl (ちょっと面倒)
brew install cyrus-sasl libtool automakegit clone https://github.com/moriyoshi/cyrus-sasl-xoauth2.gitしてそのディレクトリに入ります。- libtoolize を使うのですが homebrew の libtool は(macOS標準のlibtoolとぶつからないように)
glibtool,glibtoolizeと g がついているそうなのでautogen.shの先頭に以下の2行を追記します。
alias libtoolize=glibtoolize
alias libtool=glibtool
- ビルドします。isyncとほぼ同じ手順で
sh autogen.sh; ./configure; makeで ok です。 - フォルダ内にある
.libsサブフォルダにある2つのlibxoauth2*soファイルを/opt/homebrew/Cellar/cyrus-sasl/(バージョン)/lib/sasl2にコピーします。
pinentry
パスワード入力のGUIがないとうまくいきません。
$ brew install pinentry-mac
として、~/.gnupg/gpg-agent.conf に
pinentry-program /opt/homebrew/bin/pinentry-mac
を加えます。gpg-agent が動作中の場合はkillしてください。
以上で大丈夫なはずです。mbsync hogehoge を試してみましょう!