mu4eでEmacsでのメール送受信を実現する方法

## はじめに
メールはSparkというメールクライアントを使えばいい。それでもmu4eを取り上げるのはEmacsでできることは全てやってみたいから。今回はメールを使いたい、ただそれだけだ。

ただし、Emacs見習いの自覚のある諸兄らは以下の点に留意されたい。
1. Emacsでメールを使う方法はこの記事であげる限りではない。
2. mu4eのユーザーマニュアルは英語だが読むべし。
3. ターミナルでの設定やテストも必要となる。

<font color="MediumBlue">設定ファイル（.offlineimapや.msmtprcなど）については取り上げない。
落ちているものを拾った結果、ほぼそのまま利用可能と判断したため。

ほとんどmu4e本家公式サイトに書いてあるとおりだが、日本語で書いておく価値はあるのかもしれない。
</font>

### 執筆時の環境
- MacOSX Catalina 10.15.5
- Emacs 26.3 (<font color="SlateBlue">**Spacemacs** 0.300.0 develop</font>)
- mu stable 1.4.10
- offlineimap-7.3.3
- msmtp: stable 1.8.11

2021年現在、普通のEmacs27を使用中。もちろん使える。

### 更新履歴
- 2020/07/19(SUN): 新規作成
- 2021/02/25(THU): 章、「0.　必要条件」を追加

<font color="DarkOrange">TODO</font>:メールの暗号化については後日、追記する。
<font color="DarkOrange">TODO</font>:受信メール更新時のエラーをなんとかする。
## 0. mu4eが動く必要条件：
1. Emacs24 >= version
2. xapian: オープンソースの検索エンジンライブラリ [公式サイト](https://xapian.org/)
3. gmime: MIMEを使用してメッセージを作成および解析するために使用できるC / C ++ライブラリ [公式サイト](http://spruce.sourceforge.net/gmime/)
4. gcc: 言わずと知れたコンパイラ＆ライブラリ
5. clang: 言わずと知れたC系言語のコンパイラフロントエンド
6. GNU Autotool群
7. make
8. (option)GTK+, Webkit、Guile

## 1. メールの送受信に必要なもの
利用するツールの選別はmu4eのユーザーマニュアルに則って決定した。

- <font color="MediumSeaGreen">Emacs</font>: エディタとして、mu4eのUIとして使われる。
- <font color="MediumSeaGreen">mu</font>: メールのサーチエンジン。
- <font color="MediumSeaGreen">mu4e</font>: Emacsでメールを書いて読んで返信する。メールクライアント。
- <font color="MediumSeaGreen">offlineimap</font>: オフラインでもメールを読めるようにする。
- <font color="MediumSeaGreen">msmtp</font>: メールを送信する。
- <font color="MediumSeaGreen">メールアカウント</font>: Gmailやoffice365。複数のアカウントで混合も可。

### 1-1. プロトコルについて

- 送信は「SMTP: Small Mail Transfer Protocol」を使って行われる。
- 受信は「IMAP: Internet Message Access Protocol」を使って行われる。

Gmailの設定ではおそらく初めからIMAPが選択されていると思われるが、一応確認してもらいたい。
`「ブラウザのGmail」-> 「右上の：設定」->「全ての設定を表示」->「メール転送と POP/IMAP」->「IMAPアクセス: IMAPを有効にする」`

### 1-2. ツールのインストール
MacOSの場合、全てbrewでインストールできる。たまに依存関係にあるツールが問題を引き起こした例も過去にはある模様。筆者が試したのは2020/07だが特に問題はなかった。

```shell:brew
brew install mu
brew install offlineimap
brew install msmtp
```
```emacs-lisp:.spacemacs
;; 後述にも出てくるが一応
dotspacemacs-configuration-layers
   '(
     (mu4e :variables mu4e-installation-path "/usr/local/share/emacs/site-lisp/mu4e/")
    )
```

#### muの「--with-emacs」は指定できない。
以前はできたようだがこのオプションは削除されたようだ。　このオプションが実際に何をしていたのかは知らないが、mu4eの設定として「mu4e.el」の場所を教えてあげれば問題ないようだ。

「--with-emacs」のオプションを付けるように、Spacemacs公式のドキュメントにも書いてあるし、他のブログなどにも書いてあるので、~~七度尋ねて人を疑う純朴なタイプの~~筆者はかなり時間を取られてしまったが、実際に動いているのだからいいじゃないか。

そう言えば、monoというものをインストールすると問題が解決したという記事を見かけたので一応入れて見た。特に邪魔にもならないので当分入れたままにしてみるとする。
`brew install mono`

```zsh:command
# 初めてやることを想定して説明
updatedb
# databaseが無いと言われたら下記のようなコマンドを打つように言われるので、コピーして実行
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
#DBを作成し始める。あなたの環境によっては時間がかかるかもしれない。
locate mu4e.el
```
#### mu4e.elを見つけたら
.spacemacsに設定を書く。user-configに書くか、layerの部分に書くかは試してないのでなんとも言えないが多分どちらか一方でも良い。ただuser-config部分は後から読み込まれるので先にどちらかと言えばlayerには在り処を教えてあげたほうが何かといいのかもしれない。

```emacs:.spacemacs->dotspacemacs-configuration-layers
(mu4e :variables mu4e-installation-path "locateで見つけたパスを書く")
# /usr/local/share/emacs/site-lisp/mu4e/　になると思われる。
```
```emacs:.spacemacs->user-config
(use-package mu4e
  :load-path "/usr/local/share/emacs/site-lisp/mu4e/")
```

### 1-3. 設定について
前述の通り詳しくは取り上げないが注意点をいくつかあげたい。
#### Gmailの場合 (というかGmailしか調べてない)
アプリパスワードを使おう。-> [Gmailヘルプ: アプリパスワードでログインする](https://support.google.com/mail/answer/185833?hl=ja)
メールサーバの情報など。-> [Gmailヘルプ: 他のメール プラットフォームで Gmail のメールをチェックする](https://support.google.com/mail/answer/7126229?hl=ja)

**意外とわからないのがアカウント名とユーザー名とメールアドレス。実際には全部同じなので、メールアドレスを入れておけば問題ない。**　パスワード部分はアプリパスワードを入れよう。

#### Spacemacsがエラーを出す
user-configに書くmu4eの設定でエラーが出る。
mu4e.elの中身を見れば良いのだが、~~Dont think, feel.が信条の~~筆者はとりあえずコメントアウトした。それでも動いているからいいじゃない。

エラーになるのは下記の部分。

```emacs-lisp:.spacemacs
(use-package mu4e
    :ensure t ;;何故かこれがあると「mue4-」という名前のパッケージはない。とご立腹。

    (setq mu4e-maildir "~/Maildir") ;;何故かこれがあるとエラーになる。

    ;; 下記は「--fromと--read-envelope-fromは両方同時に設定できない」とご立腹。
    (setq message-sendmail-extra-arguments '("--read-envelope-from"))

    ;; 送信時にエラーになる。意味不。
    (setq message-sendmail-f-is-evil)
)
```
ensureの部分のエラーが一番理解不能。この辺りはぼちぼち解明していきたい。

## 2. mu4eの使い方、キーバインド
mu4eには３つのモードがある。main-view, header-view, message-viewだ。
headerとmessageを行き来するのは「y」で行う。
新規作成のcomposeでは送信せずにmain-viewへ戻りたい場合は、「C-c C-k」でバッファをキルすれば戻れる。

基本的にmain-viewでの操作。

| 動作              |キー               |補足                 |
|:-----------------|:------------------:|:------------------|
| 起動              |M-m a M          |C-x mで一気に新規作成までいける。|
| 新規作成          |C|続けてアカウントを選択する|
|新規作成から戻る     |C-c C-s or C-c C-k|送信するかバッファをキルする|
| 未読メールを見る    |bu                  |headerへ戻るのはy|
| 今日きたメールを見る |bt                  |headerへ戻るのはy|
| 最後の7日間のメールを見る|bw               |headerへ戻るのはy|
| 画像つきメール？    |bp                  |要調査|
|バッファをキルする   |q                    |viewをキルすると前のviewへ戻る|
|メールを更新        |U                    |<font color="Crimson">今のところエラー出てるっぽい</font>|
全部は書ききれないので割愛するが、マニュアルも内蔵されていてキーバインド についても書かれているので参考に。
`M-x mu4e-diplay-manual`

## 3. mu4e-alert
Work In Progress.
メールが届くたびに教えてくれるやつ。いらないかも。。。草

## 4. メールの暗号化
Work In Progress.
GnuPGを使いたい。

## むすび
色々とハマったがとりあえずメールの送受信はできている。
エラーがまだある。なんとかする。
やっぱりメールの暗号化をしないといけない。だってかっこいいじゃん。
つづく。

## 参考文献
＠本家系

- [Mu4e 1.4.6 user manual](https://www.djcbsoftware.nl/code/mu/mu4e/index.html): mu4eに関することから周辺のツールなどのこともわかる。
- [OfflineIMAP](http://www.offlineimap.org/)
- [About msmtp](https://marlam.de/msmtp/)
- [mu4e layer](https://develop.spacemacs.org/layers/+email/mu4e/README.html#see-also)


＠設定系

- [offlineimap ArcWiki](https://wiki.archlinux.jp/index.php/OfflineIMAP): 設定はそのまま使える。
- [msmtp ArcWiki](https://wiki.archlinux.jp/index.php/Msmtp): 設定はそのまま使える。
- [Doom Emacs Configuration](https://tecosaur.github.io/emacs-config/config.html): Doom Emacsがメインだがmu4eに関することも含めて色々と分かって便利。


＠暗号系

- [GnuPG ArcWiki](https://wiki.archlinux.jp/index.php/GnuPG)
- [GnuPG 本家](https://gnupg.org/)
- [PGP(GnuPG)の導入方法教えてやるから、いい加減、ファイルをZIP暗号化して、別メールでパスワードを送るのは、やめてくれ！ ～セットアップ編～](https://qiita.com/karkwind/items/9cb2907060f210fc940a)
- [Configuring Doom emacs, mbsync, and mu4e for use with o365](https://www.chrislockard.net/posts/2019-11-14-notes-on-configuring-mu4e-and-doom-emacs/)