UP | HOME

cheat sheet for mu4e

Table of Contents

Last modified: 20241015T1616+0900


emacsはメーラーとしても優秀。Mew, mu4e, notmuch, Wanderlust, Gnusなどの選択肢があるが、今はmu4e(とnotmuch)がアツいんではないか。

これらのメーラーを使う利点は、何といっても、emacsを使った通常業務との連携が抜群であること。emacsでメールを書けるのは当たり前だが、org-modeなどemacsの他のパッケージとメールが地続きになっている感覚は、なかなか爽快である。たとえば、

等々。

例によって、キーバインドが独特なので、慣れるまではこういったチートシートが必須だが、 diredorg-mode など他の有名パッケージとなんとなく共通しているので覚えやすい。最初は、基本的なものだけを覚えて、他は、必要になったら調べるというのでOK。

(言うまでもなくこのページは自分が参照するために作ってます。)

1. セキュリティーの関係で使えないとお悩みの方に

Gmailなどは、認証が厳しくなって、ツールを使ってメールの送受信をするのが難しくなっている。頑張って設定するのもロマンだが、困難を回避する簡単な道もある。

1.1. 送信

最近のemacsでは、送信を、OSデフォルトのメーラーに任せる設定ができる。

(setq send-mail-function 'mailclient-send-it) ; 送信はMail.appを使う

これを使えば、認証の問題は解決する。たとえば、Macだと、mu4eで作成したメールの内容を、送信の時点で、Mail.appのメール作成画面に貼り付けることができるので、Mail.appが動いているかぎり、認証の問題は生じない。

この場合、Mail.appは送信だけに使うので、Mail.appでアカウントの設定をしたら、そのアカウントをオフラインにすることをお勧めする。複数のメーラーをバックグラウンドで動かすとか、メールを複数の場所で管理するとかは、非効率で混乱のもとになる。(気にしない人は無視してください。)

1.2. 受信

isyncなどで受信できるようなメールサーバーに転送して、そちらから受信する。

2. emacsからマニュアルが読めるようにする

mu4eには詳細なマニュアルがあるが、homebrewでmuをインストールした場合などは、そのままではemacsのInfoから読めない。Web上のmu4e manual for version 1.12.5を参照してもいいが、emacsのInfoから読みたい場合には、mu4eのマニュアルがある場所を調べて、それをリストに追加する必要がある。

ターミナルで、

$ brew info mu

として出てきたインストール先のディレクトリの下、share/info/の下に、 mu4e.info.gz が見つかったら、そのディレクトリを、以下のように追加する。これは、init.elで指定する。

(add-to-list 'Info-additional-directory-list "/opt/homebrew/Cellar/mu/1.12.6/share/info")

3. ヘッダー画面 (The headers view)

メールのヘッダーが並んでいる画面でのキー操作。Cf. 4.2 Keybindings

3.1. 基本操作

n p 次のメッセージ 前のメッセージ
] [ 次の未読メッセージ 前の未読メッセージ
} { 次のメッセージ 前のメッセージ (n p と同じ)
y ヘッダー画面とメッセージ画面を行き来する
RET メッセージを開く

3.2. 検索

以下はキー操作。検索で用いる表現は、 mu find と共通する。7.1 Queries

s 検索
S 直前の検索語を編集
/ 絞り込み
b ブックマークを検索
B 検索前にブックマークを編集
c 検索語を補完
j メールディレクトリにジャンプ
M-left 前回の検索語へ
M-right 次回の検索語へ
O 並び替え順を変える
P 簡易or詳細検索をトグル

3.3. マーク(メールの削除、未読管理)

diredと似ている。

d 削除(ゴミ箱へ移動)マークを付ける
= 削除(ゴミ箱へ移動)マークを外す
DEL D 完全削除マークを付ける
m 別のフォルダへ移動するようにマークする
r refiling用にマークする
+ - フラグを付ける(外す)
? ! 未読(既読)にする
   
u マークを外す
U 全てのマークを外す
   
% 正規表現でマークする
T t スレッド全体(サブスレッド全体)をマークする
   
x マークしたファイルをそれぞれ実行する

3.4. スレッド

S-left ルートへ
TAB 現在のレベルのスレッド表示をトグル
S-TAB 全てのスレッド表示をトグル

3.5. メールの作成

R,W,F,C 返信、全員に返信、転送、作成
E 下書きを編集

3.6. その他

a ヘッダに対して定義した操作を実行
C-+ C-- 表示されるヘッダの数を増減
H ヘルプ(Infoを表示)
C-S-u メールを更新
C-c C-u メールを更新

4. メッセージ画面 (The message view)

メールの内容が表示される画面でのキー操作。ヘッダー画面でのキー操作と同じものは省略。

Cf. 5.2 Keybindings

4.1. 基本操作

RET 下へスクロール
M-RET カーソル位置にあるURLや添付ファイルを開く
   
SPC 下へスクロールして、最後まで来ると、次のメッセージに移動
S-SPC 上へスクロール

4.2. 操作

添付ファイルの操作は、org-modeのattachmentの操作に似ている。添付ファイルを確認するのは e

g 番号付きURLをブラウザで開く
C-u g 複数のURLを開く
f 番号付きURLをダウンロード
C-u f 複数の番号付きURLをダウンロード
k 番号付きURLをキルリングに保存
C-u k 複数の番号付きURLをキルリングに保存
   
e 添付ファイルをアプリで開く・保存する
a 現在のメッセージに対して、定義したアクションを実行
A 現在のメッセージの添付ファイルに対して、定義したアクションを実行

4.3. その他

z, Z 通常は連動しているヘッダーとメッセージを分離させる(結び付ける)
. メールのソース(raw)を表示

5. 設定例 sample setting

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; mu4e.el (参考になりそうなところだけ抜粋)
;;;

(add-to-list 'load-path "/opt/homebrew/share/emacs/site-lisp/mu/mu4e")
(add-to-list 'Info-additional-directory-list "/opt/homebrew/Cellar/mu/1.12.6/share/info")

(require 'mu4e)
;; use mu4e for e-mail in emacs
(setq mail-user-agent 'mu4e-user-agent)

;; send-mail-function
(setq send-mail-function 'mailclient-send-it) ; 送信はMail.appを使う

;; folders
(setq mu4e-drafts-folder "/Drafts")
(setq mu4e-sent-folder   "/Sent")
(setq mu4e-trash-folder  "/Trash")
(setq mu4e-maildir-shortcuts
      '(
        (:maildir "/INBOX" :key ?i)
        (:maildir "/Sent"  :key ?s)
        (:maildir "/All"   :key ?a)
        (:maildir "/Starred"  :key ?r)
        (:maildir "/Drafts"   :key ?d)          
        )
      )

;; allow for updating mail using 'U' in the main view:
(setq mu4e-get-mail-command "mbsync -a")
(setq mu4e-update-interval 60)          ;retrieve and index every 60 seconds


;; composing mails
(add-hook 'mu4e-compose-mode-hook 'turn-off-auto-fill)

;; sending mails
(setq message-confirm-send t)           ;confirm before sending

;; make an original bookmark "flag"
(add-to-list 'mu4e-bookmarks
             '( :name "flag"
                :query "flag:flagged"
                :key ?f))

;; mu4eの中からorg-captureを使う(主にメール返信スケジュールの作成)
(with-eval-after-load 'org-capture
  (add-to-list 'org-capture-templates
               '("s" "scheduled to rspond" ;返信する日をスケジュールする
                 entry (file+olp+datetree "")
                 "* TODO respond to %:fromname: %:subject\nDEADLINE: %T\n%a"
                  :time-prompt t
                  :immediate-finish t)
               )
  (add-to-list 'org-capture-templates          
               '("r" "Rspond in a day"  ;1日以内に返信する
                 entry (file+olp+datetree "")
                 "* TODO respond to %:fromname: %:subject\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \"+1d\"))\n%a"
                 :immediate-finish t)
               )
  )
;; mu4eからorg-captureを使うときはmu4eが用意した特別なコマンドを使う
(define-key mu4e-headers-mode-map (kbd "C-c c") 'mu4e-org-store-and-capture)
(define-key mu4e-view-mode-map    (kbd "C-c c") 'mu4e-org-store-and-capture)

;; org-captureのメール返信スケジュールのためのキーは、mu4eの中からしか見えない
(setq org-capture-templates-contexts
       '(("s" ((in-mode . "mu4e-headers-mode")(in-mode . "mu4e-view-mode")))
         ("r" ((in-mode . "mu4e-headers-mode")(in-mode . "mu4e-view-mode")))))

Author: Yoshinori Ueeda

Created: 2024-10-15 Tue 16:16

Validate