Outlookでgit send-emailを使うための設定

数週間の格闘の末にOutlookgit send-emailが使えるように設定できたので、設定内容について忘れないうちに記録しておく。 この記事の内容は2023年現在のOutlookSMTPサーバーの挙動を前提にしていることに注意されたい。

なお、この方法で完璧にsend-emailが使えるというわけではない。 具体的には、複数のパッチを同時に送信した時にスレッドが崩れてしまうという問題が残っている。 これは、gitが設定したメールのMessage-IDがSMTPサーバーによって書き換えられ、 パッチのIn-Reply-Toに対応するMessage-IDが消滅してしまい、スレッドの親子関係の情報が失われてしまうためである。 この問題については依然調査中である1

設定内容

outlook.jp ドメインのメールアドレスで git send-email を使うには、~/.gitconfig に以下の内容を追加するとよい。

なお、smtpuserの内容は実際のメールアドレスに、 smtpdomainの内容は送信側のローカルIPアドレス2に、smtppassの内容はOutlookのパスワード3に置き換える必要がある。 また、outlook.comなど.jp以外のドメインではsmtpserverの設定を変える必要があるかもしれない。

[sendemail]
  smtpserver = smtp.office365.com
  smtpuser = user@outlook.jp
  smtpencryption = tls
  smtpserverport = 587
  smtpdomain = 192.168.1.128
  smtppass = password

smtpdomainについて

Outlook以外でのgit send-emailの設定を紹介する多くの記事では、smtpdomainの設定を行っていない。 しかしながら、この設定を行わないと正常にsend-emailが行えない場合がある。 この節では、このようにsmtpdomainの設定を行う理由について説明する。

smtpdomainは、git send-emailがメールを送信する際にSMTPサーバーへ送るHELOコマンド4の内容として利用される。 このHELOコマンドの内容によっては、OutlookSMTPサーバーにメールの送信を拒否されてしまうため、 smtpdomainの値をSMTPサーバーに拒否されないものに設定する必要があった。

今回試した限りでは、送信側マシンのローカルIPアドレスをHELOで送信するとうまく送信できたため、その方法を記している。 これはメールクライアントであるThunderbirdと同様の挙動のため、他のメールサービスでもとりあえず試す価値はあるかもしれない。

調査方法

(覚書)git send-email --smtp-debug=1などのオプションを利用して地道に調査を行った。だるかった…


  1. というか、書き換えられたMessage-IDを取得してIn-Reply-Toに反映するフックを書かないと解決しない気がする
  2. 試してないけど、ローカルIPのレンジなら何でも通るんじゃないかなぁ
  3. dotfilesにパスワードベタ書きが嫌な場合は、git-credentialを使うといいらしいです。試してませんが。
  4. see also: https://blog.smtps.jp/entry/2017/09/07/114820