ソースコードのパッチを送るためのGmail (G Suite)・Thunderbirdの設定

<!--
0file: gmail_ja.md
0title: ソースコードのパッチを送るためのGmail (G Suite)・Thunderbirdの設定
0url: https://qiita.com/wataash/items/6538c193b5c80a52c285
sb: https://scrapbox.io/wataash/gmail
tags: GSuite gmail Git thunderbird svn
twitter: https://twitter.com/wata_ash/status/1238739570415423488
-->

[English](https://blog.wataash.com/entry/2020/03/14/151858)

GitHubでホストしていない古いプロジェクト（GNUとかGNUとか）を触っていると、コミットする手段がメールなことがしばしばあります。オープンソース活動にGmailをお使いの方は多いと思いますが、Gmailのwebメーラーでパッチを送ると、勝手にタブをスペースに変換するわ削除するわでまともに使えません。

![patch collapsed via web Gmail](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/562af4b7-9343-4016-10d6-662c424edca1.png)

```c
$ git apply < patch.txt
error: patch failed: gdb/ChangeLog:1
error: gdb/ChangeLog: patch does not apply
error: patch failed: gdb/darwin-nat.c:1985
error: gdb/darwin-nat.c: patch does not apply
```

そこでwebメーラーではなくメールクライアント (MUA; Mail User Agent) からGmailを使ってやる必要があります。

## メーラーの選定

TL;DR: Muttに慣れている人はMuttで、それ以外の人にはThunderbirdをオススメします。

gitのパッチを送る場合に限っては[git-send-email(1)][]を使うという手もあります。[ググれば](https://www.google.com/search?q=git+send-email+gmail)やり方が沢山出てきます。[Linux kernelにパッチを送る際の推奨手段でもあります。][linux]

[git-send-email(1)]: https://git-scm.com/docs/git-send-email
[linux]: https://www.kernel.org/doc/html/latest/process/email-clients.html

この記事では `cvs diff`、`svn diff`、その他 *unified diff* (`diff -u`) 形式のパッチを送ることを想定します。

まず[Linux kernelドキュメント][linux]と[git-format-patch(1)][git-format-patch]に載っている全メーラーを調べてみることにしました。選定基準は：

[git-format-patch]: https://git-scm.com/docs/git-format-patch

- オープンソース
- 継続して開発されている。Gmailの仕様は頻繁に変更される（例えば[パスワード認証はデフォルトで無効][1]になったり）のですぐに対応できるソフトウェアが望ましいです。
- パッチを送っている人が多い。エラーをググればすぐ出ると期待されるので。

[1]: https://gsuiteupdates-ja.googleblog.com/2019/12/g-suite_24.html

ググった結果：

| Search keywords                         | GUI or TUI      | # results as of 2020/03/13 |
| ---                                     | ---             | ---                        |
| "git am" Mutt                           | TUI             | 11,800                     |
| "git am" Thunderbird                    | GUI             | 11,600                     |
| "git am" Alpine                         | TUI             | 5,300                      |
| "git am" KMail                          | GUI             | 1,650                      |
| "git am" Claws Mail                     | GUI             | 2,270                      |
| "git am" TkRat                          | GUI             | 252                        |
| "git am" Sylpheed                       | GUI             | 262                        |
| "git am" Evolution (run only on Linux)  | GUI             | 11,900                     |
| "git am" outlook (non open source)      | GUI             | 6,690                      |
| "git am" apple mail (non open source)   | GUI             | 7,850                      |
| "git am" "apple mail" (non open source) | GUI             | 101                        |

まずMuttを試してみましたが、*authentication failed* みたいなエラーが出て、ググって解決しなかったのでやめました。Muttのスペシャリストになるのに時間を費やしたくない。

次にThunderbirdを試した結果サイコーでした。多くの人がパッチを送っているようだし、ググれば全部出る。

## GmailのIMAPを有効にする

設定で *Enable IMAP* します。

![enable IMAP in Gmail's Setting](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/624ad5b4-5685-7c5b-11a3-2e476a45c100.png)

## Thunderbirdでアカウント追加

*File* → *New* → *Existing Mail Account...*

![add Gmail's account on Thunderbird (1)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/3abc5566-8562-87bc-6d6a-5940d8adac87.png)

任意の名前とGmail (foo@gmail.com) か G Suite (foo@foo-organization.com) のメールアドレスを入力して *Continue*。今は *Password* は入力しなくてOKです。

![add Gmail's account on Thunderbird (2)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/507d5b23-334e-d991-1783-4b3f63deea67.png)

*Manual config* をクリック。

![add Gmail's account on Thunderbird (3)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/ac12a1ae-ecec-5908-873a-05b4f6a376b9.png)

*Authentication* が *OAuth2* になっていることを確認して *Done*。

![add Gmail's account on Thunderbird (4 Google OAuth)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/9f006dcc-fb69-3e0d-2a96-e18e903a17a8.png)
![add Gmail's account on Thunderbird (5 Google OAuth)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/5123e6e5-49c2-7466-5033-a778a8c9eb8f.png)

Google (G Suite) のパスワードを入力。

![add Gmail's account on Thunderbird (6)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/99e4a0d7-6aa1-09a7-0fa5-872f8b437adf.png)

残念ながらエラーになりました（そのうち直ると思います）。

- User name or password invalid
- Configuration could not be verified ― is the user name or password wrong?

とりあえずパスワード認証することにします。

### パスワード認証

**Thunderbird の設定画面は開いたままにしておいて下さい**

パスワード認証を行うためには *less secure app access* を有効にする必要があります。

G Suiteをお使いの場合（you@gmail.com でなく you@your-company.com でGmailをお使いの場合）G Suiteの管理者が[こちら](https://support.google.com/a/answer/6260879?hl=ja)の設定を行う必要があります。

![(G Suite) Allow users to manage their access to less secure apps](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/f1c5b707-a2a2-5dda-245b-edb3d3fdd66a.png)

[Less secure app access
settings](https://myaccount.google.com/lesssecureapps)で *Allow less secure apps* をONにします。アカウントは右上のアイコンで切り替えられます。

![turn on: Allow less secure apps](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/0d61bc49-5f34-ec52-42f6-ab18c07ada95.png)

Thunderbirdに戻り *Normal password* を選んで *Done*。

![add Gmail's account on Thunderbird (7)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167409/0d8632ac-087d-856a-7ea3-3a2fffdc9582.png)

これでメールが受信できるはずです 🎉

## format=flowed を無効にする

しかしまだThunderbirdがパッチを壊しちゃいます。[git-format-patch(1)][git-format-patch]に従い、

- *Edit* → *Account Settings* → *Composition & Addressing* → *Compose
  messages in HTML format* のチェックを外す
- *Edit* → *Preferences* → *Advanced* → *Config Editor...*
  - `mail.wrap_long_lines`: `false`
  - `mailnews.wraplength`: `0`
  - `mailnews.send_plaintext_flowed`: `false`

これでメールのヘッダーに `format=flowed` が付加されなくなります。

```c
To: bar@gmail.com
From: Wataru Ashihara <foo@gmail.com>
Subject: test
Message-ID: <***@gmail.com>
Date: Mon, 9 Mar 2020 19:48:53 +0900
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
                                       ^^^^^^^^^^^^^^^ this removed!
Content-Language: en-US
Content-Transfer-Encoding: 7bit

body
```

パッチを壊さずに送信できるようになりました。

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />この 作品 は <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">クリエイティブ・コモンズ 表示 4.0 国際 ライセンス</a>の下に提供されています。