ぼくの MUA (Mail User Agent) 変遷は、ざっくり四半世紀かけて
MH → mew → wanderlust
でした。wanderlust は emacs 上で動く非常に良くできた MUA で
ちょうど 20 年使い続けました。が、ここに来てなぜか MUA の
乗り換えを検討して mu4e というのを知り、これが予想外に
好感触だったので設定方法その他を解説します。
「wanderlust、なにそれ?」という人でも大丈夫ですが、
日常的にemacsを使っていることが前提の記事になってます。
mu4e を含めて完全な MUA として機能させるためのツール一式を 紹介します。この組み合わせ以外でも可能です(特に送信部分)。
環境構築の順番は恐らく isync > mu (受信) > msmtp > mu (送信) がわかりやすいと思うので以下、それで行きます。
送受信パスワードを設定します。(この記事で紹介するやり方は) ここが素晴らしくて、MUAに直接管理させず、gpg-agent に任せます。 すると、例えば linux だったら Seahourseと 連携できてとても便利で安心です。
$ gpg -e > ~/mailpass_work.gpg # 仕事ようアカウントのパスワード (受取人(自分)を指定→空行) (メイルサーバのパスワードを入力 → ^D) $ gpg -e > ~/mailpass_private.gpg # プライベートアカウントのパスワード (受取人(自分)を指定→空行) (メイルサーバのパスワードを入力 → ^D)
あと、サーバ側のフォルダ名が日本語だと文字化け(というかRFC2060に 則ったエンコーディング)が起こるので事前に英語にしておくのも良いです。 (ただ、MSのOutlookの場合は言語設定を変えてUI全体を英語にする必要がありました……。) 日本語のままの場合はサーバ側を "modified UTF-7" 、ローカルを適当な フォルダ名にマッピングする必要があります。それは mbsync の設定で行いますが、 後述します。
インストールは簡単です。Linuxだったらapt install isync
、
macOS (homebrew) だったら brew install isync
です。
その後でローカルのMaildirフォルダと、各アカウント別のサブフォルダを
作ります。mkdir -p ~/Maildir/work; mkdir -p ~/Maildir/private
あたりでいいでしょう。ここまでは簡単。でも設定ファイルはややこしいです。
ホームディレクトリに.mbsyncrc
というファイルを作ります。そこで
『IMAPAccount (アカウント情報)』『IMAPStore (サーバ)』『MaildirStore (ローカル)』
『Channel (同期)』をそれぞれ設定します。この設定は非常に多岐にわたるのですが、
以下ではぼくが使う必要な最小のものです。workとprivateという2つのアカウントを
使うという状況設定です。
# ~/.mbsyncrc Expunge Both Create Both # accounts IMAPAccount work PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/mailpass_work.gpg" Host awesomeserver.mycompany.com User kobayashi SSLType IMAPS AuthMechs LOGIN IMAPAccount private PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/mailpass_private.gpg" Host myserver.mydomain.jp User yagshi SSLType IMAPS AuthMechs LOGIN # IMAPStores IMAPStore work-server Account work IMAPStore private-server Account private # MaildirStores MaildirStore work-local Path ~/Maildir/work Inbox ~/Maildir/work/Inbox MaildirStore private-local Path ~/Maildir/private Inbox ~/Maildir/private/Inbox # Channels # 例として、work は全部ひっくるめて work としています。 # private は日本語フォルダがあるという前提で "inbox" と "迷惑メール" のみを同期することにします。 Channel work Master :work-server: # 最新版では Master ではなく Far 推奨 Slave :work-local: # 最新版では Slave ではなく Near 推奨 Patterns: % !Archive !Deleted # Archive と Deleted フォルダは同期しない Channel private-inbox Master :private-server:inbox # サーバ側の "inbox" を…… Slave :private-local:inbox # ローカルの "inbox" にマップ。 Channel private-junk Master :private-server:"&j,dg0TDhMPww6w-" # サーバ側の "迷惑メール" (modified UTF-7) を…… Slave :private-local:junk # ローカルの "junk" にマップ。 # Group (private の 2つのチャンネルをまとめて private グループを定義) Group private Channel private-inbox Channel private-junk
ここまでできたらテストしてみましょう。$ mbsync -a
とします。
必要に応じてgpg-agent がパスフレーズを聞いてくるので答えます。
これで同期が行われます。エラーがでなければokです。Maildirの中を覗いて納得してください。
インストールは簡単です。Linuxならapt install mu4e
、
macOS (homebrew) なら brew install mu
で必要なものは一式
入ると思います。mu4eはemacsパッケージなのでemacsの設定をします。
~/.emacs.d/init.el
なり~/.emacs
なりを編集して
起動時に以下のようなものを実行するようにしてください。mu4e-get-mail-command
で
mbsync を指定します。mu4e-headers-fields
はメイルの
一覧表示の際の列幅です。特に human-date
はデフォルトが少し
狭くて日本語環境だとはみ出るので16以上が良いと思います。
(add-to-list 'load-path "/opt/homebrew/share/emacs/site-lisp/mu/mu4e"); この1行はmacOS のみ
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e"); 上でうまくいかない場合ここちら
(require 'mu4e)
(setq mu4e-get-mail-command "mbsync -a")
(setq mu4e-headers-fields '((:human-date . 16) (:flags . 6) (:mailing-list . 6) (:from . 22) (:subject)))
;; この下に後述のコンテキスト設定を書きます。コンテキストは特に送信時に重要なものなのですが、今はなしでいいです。
つぎにmuを初期化します。mu init --my-address=kobayashi@awesomecompany.com --my-address=yagshi@myserver.jp
などとしてください(初回のみ)。
~/Maildir
フォルダおよびその下のサブフォルダがないとエラーが
出ると思います。エラーメッセージに従って掘ってください。
続いて emacs を起動して
M-x mu4e
します。U
として、mbsync を
呼び出して Maildir を同期し、mu のデータベースに反映させましょう。うまく行けば
[bu](未読)や[bt](本日)の数字が何か出ると思います。
これでe-mailの閲覧はできる状態です。この記事ではキー操作等の詳細は説明しませんので
公式マニュアルなどを
参考にしてください。操作は wanderlust と似ています。
メイルを送信するための設定です。ホームディレクトリに.msmtprc
というファイルを作ります。送信パスワードはパスワードの準備&その他の
ところで作ったファイルを使うように設定します。(passwordeval を設定する
ことで平文パスワードを保存しない点が素晴らしい!)
以下に~/.msmtprc
の例を示します。
defaults auth on tls on #tls_trust_file /etc/ssl/certs/ca-certificates.crt # 必要な場合 # work account work host awesomesmtp.mycompany.com port 587 from kobayashi@mycompany.com user kobayashi@mycompany.com passwordeval "gpg --quiet --for-your-eyes-only --no-tty --decrypt ~/mailpass_work.gpg" # private account private host mysmtp.mydomain.jp port 587 from yagshi@mydomain.jp user yagshi passwordeval "gpg --quiet --for-your-eyes-only --no-tty --decrypt ~/mailpass_private.gpg"必要であればターミナルから直接 msmtp コマンドでテストします。以下は 設定したプライベートのアカウントから仕事のアカウントにテストメイルを 送信する例です。
$ msmtp --account=private kobayashi@mycompany.com # ←送信先を指定 subject: test email hello world ^D # ←Ctrl+D の意味
msmtpを使ってメイルを送信するためにコンテキストを作ります。準備中です。
Maildir error: UID 1701 is beyond highest assgned UID 42.
~/.mbsync/
以下のエラーとなったサーバのファイルをすべて消します。
そして、~/Maildir/
以下のエラーとなったサーバのフォルダの中身をすべて消します。
その後、mbsync -a などとしましょう。全syncなので多少時間かかりますが。
その再、mu init もしておかないと再びおかしくなるようです。
Maildir error: duplicate UID 42.
1629773120.886102_6030.host,U=42:2,RS
みたいなファイルを見つけて、
,U=
以下を削除したファイル名
1629773120.886102_6030.host
にリネームしてください。