yagshi's website
もっと簡単にmu4eをMSのOAuth2に対応させる

もっと簡単に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を入力します。

[サインイン画面]
あちらはThunderbirdだと思い込んでいるようですが、気にせず認証して権限を与えます。トークンファイルが作られました。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