Outlook.comやHotmailをMSMTPでOAuth2認証する、getmailの設定を使って。
普通のメール送信はデスクトップ版Outlookを使っているから出番は少ないものの、muttから呼び出したり、コンソールからのメール送信はMSMTPを使っている。これもOAuth2に対応させておかないとそのうち使えなくなってしまう。
前回はgetmailでOAuth2認証を使ってメールが受信できるように設定したから、今回はgetmailの設定を流用してMSMTPでOutlook.comやHotmailのOAuth2を使ってメールの送信ができるようにする。
使用環境
Windows11上のWLS2で動くDebian11 (11.10)
msmtp version 1.8.26 (ソースからインストール)
getmail6 6.14 (OAuth2を設定した状態)
MSMTPインストール
# 既存のMSMTP 1.8.11(Debianパッケージ)を削除
sudo apt-get remove msmtp
# 不足のパッケージを取得
sudo apt-get install pkg-config
# MSMTP最新版ダウンロード、展開
wget https://marlam.de/msmtp/releases/msmtp-1.8.26.tar.xz msmtp-1.8.26.tar.xz
tar Jxvf msmtp-1.8.26.tar.xz
cd msmtp-1.8.26
# ビルド、インストール
# TLSサポートを有効にする。
./configure --with-tls=openssl
make
sudo make install
認証サーバ設定
OAuth2の認証サーバ側の設定は既にgetmailの設定時に済んでいるため不要。設定が済んでない場合は前回のgetmail設定を参照して設定する。
メールクライアント設定
~/.msmtprc を編集。accout, from, passwordevalの値は使用者に合わせる。
account hogehoge@outlook.com
from hogehoge@outlook.com
host smtp-mail.outlook.com
port 587
auth xoauth2
tls on
tls_starttls on
user hogehoge@outlook.com
passwordeval getmail-gmail-xoauth-tokens /home/hoge/.getmail/oauth2.jsonポイントとして、passwordeval の内容に getmailに付属のgetmail-gmail-xauth-tokensとgetmailをOAuth2用に設定したファイルをそのまま使うこと。
動作確認
echo "Test mail" msmtp -a hogehoge@outlook.com hogehoge@gmail.com問題が無ければ宛先(ここではhogehoge@gmail.com)にメールが届き、/var/log/mail.logとかにログが残ることを確認する。
アクセストークン更新
二要素認証(2FA)して取得したアクセストークンが無効になったら更新を行う。getmailと共用なので外れなければ数か月に1回で良いはず。
getmail-gmail-oxauth2-tokens -i /home/hoge/.getmail/oauth2.json後記
msmtpでOAuth2を使う設定例は探すと結構出てて、gmailもMS365もどちらも十分な情報が見つかる。よくあるのはoauth2ms、msmtp-oauth2、oauth2token、mutt_oauth2.py、oauth2.py あたりを使うらしい。GPGの暗号化を組み合わせた設定もあってややこしい。getmail-gmail-xoauth-tokens を使う設定例は他では見かけなかった。受信にgetmail、送信にmsmtpといったように、MUAとMTAで別個のソフトを使おうというのがそもそもの間違いなんだろう。
msmtpもgetmailも本体組込みではOAuth2をサポートしていなくて、msmtpの場合はpasswordevalで、getmailの場合はpassword_commandで、認証サーバにアクセスする時点で有効なアクセストークンが標準出力に出てくるようなコマンドを指定すれば良いだけだと理解した。
