タグ管理という新たな世界観!!Emacs の mu4e で Gmail を読む

mu というタグメールシステムを導入したので、導入手順をまとめます。

mu4e とは

notmuch とは、タグベースの高速検索メールシステムだ。

タグベースというところが気にいって、今回試してみた。

これまで、ファイルベースのメーラが世を席巻してきた。

しかし、21 世紀はタグでデータを管理する時代なのだ!

そのことは、この本にかかれていた。

ファイラだと、FenrirFS というファイラが気に入っている。

メールだと、Gmail がある。じゃあ Gmail でいいじゃないかということになるが、 Gmail は Web ベースだ。 Emacs 好きとしては、Emacs から、メールを操作したい、というのが主な動機だ。

ちなみに、Mutt と Wanderlust は経験している。

環境と各ツールの役割

  • Ubuntu 16.04 LTS
  • mu 0.9.18… タグづけ検索メールシステム
  • mu4e 0.9.18… mu の フロントエンド I/F
  • Offlineimap 6.6.1 … ローカルディレクトリとリモートフォルダを同期するツール
  • msmtp 1.6.6… smtpmail を軽量化したメール送信用ツール

インストール方法

事前の依存ライブラリのインストール

[sourcecode language=”bash” title=”” ]
# must
$ sudo apt-get install libgmime-2.6-dev libxapian-dev gnutls-bin

# optional
$ sudo apt-get install guile-2.0-dev html2text xdg-utils
[/sourcecode]

mu のインストール

github から最新版の mu ををインストール。

[sourcecode language=”bash” title=”” ]
./configure && make
sudo make install
[/sourcecode]

mu4e(Emacs Frontend Interface) の導入

mu をインストールすると、サブディレクトリに mu4e というものがあり その中に elisp が入っている。

[sourcecode language=”emacs-lisp” title=”” ]
(require ‘mu4e)
(setq user-mail-address “fox10225fox@gmail.com”
user-full-name “Tsunemichi Harada”)

(setq mu4e-maildir “~/Maildir”)
(setq mu4e-drafts-folder “/[Gmail].Drafts”)
(setq mu4e-sent-folder “/[Gmail].Sent Mail”)
(setq mu4e-trash-folder “/[Gmail].Trash”)
;; U で 更新するときに使うプログラム
(setq mu4e-get-mail-command “offlineimap”)
[/sourcecode]

メールを受信する

2つのツールがある。

mbsync のほうがいい??

今回は、日本語情報の多い Offlineimap を使う。

Offlineimap

IMAP サーバーからメールを同期する Python ユーティリティ.

[sourcecode language=”bash” title=”” ]
sudo apt-get -y install offlineimap
[/sourcecode]

~/.offlineimaprc を作成する。 ここでは、Inbox と Notes と Drafts を同期するように設定している。

[sourcecode language=”text” title=”” ]
[general]
accounts = Gmail

[Account Gmail]
localrepository = Local
remoterepository = Remote

[Repository Local]
type = Maildir
localfolders = ~/Maildir

[Repository Remote]
type = Gmail
folderfilter = lambda foldername: foldername in [“INBOX”, “Notes”, “[Gmail]/Drafts”]
sslcacertfile = /etc/ssl/certs/ca-certificates.crt
maxconnections = 1
realdelete = no
[/sourcecode]

ターミナルより、offlineimap を入力することで、メールボックスを同期できる。

パスワードをかくす

設定ファイルは github で管理したいのだが、パスワードを晒すわけにはいかない。 netrc が使える。

[sourcecode language=”bash” title=”” ]
touch ~/.netrc
chmod 600 ~/.netrc
[/sourcecode]

.netrc の中身は次の通り。

[sourcecode language=”text” title=”” ]
machine imap.gmail.com
login fox10225fox@gmail.com
password
machine smtp.gmail.com
login fox10225fox@gmail.com
password
[/sourcecode]

定期的に動作させる

できれば定期的に動作させたい。 以下で、5 分ごとにバックグラウンドでポーリングできる。

[sourcecode language=”emacs-lisp” title=”” ]
(setq mu4e-update-interval 300)
[/sourcecode]

メール受信通知を受けたい

mu4e-alert という elisp がある。

[sourcecode language=”emacs-lisp” title=”” ]
(require ‘mu4e-alert)
;; デスクトップ通知
(when linux-p
;; デスクトップ通知
(mu4e-alert-set-default-style ‘libnotify))
(add-hook ‘after-init-hook #’mu4e-alert-enable-notifications)
;; モードライン通知
(add-hook ‘after-init-hook #’mu4e-alert-enable-mode-line-display)
[/sourcecode]

メールを検索する

mu4e を開いて、更新 U を押すと、Offlineimap が走ってメールを受信し、 mu が走ってタグ付けされる。

helm-mu

helm I/F で検索できる。

[sourcecode language=”emacs-lisp” title=”” ]
(require ‘helm-mu)
(setq helm-mu-default-search-string “(maildir:/INBOX OR maildir:/Sent)”)
(define-key mu4e-main-mode-map “s” ‘helm-mu)
(define-key mu4e-headers-mode-map “s” ‘helm-mu)
(define-key mu4e-view-mode-map “s” ‘helm-mu)
[/sourcecode]

メールを送信する

sendmail ライブラリが Emacs にデフォルトで搭載されていたけれども、 動かなかった。。。 msmtp を使う。

[sourcecode language=”emacs-lisp” title=”” ]
$ git clone git://git.code.sf.net/p/msmtp/code msmtp
$ cd msmtp
$ autoreconf -i
$ ./configure; make; make install
[/sourcecode]

.emacs の設定は以下の通り。

[sourcecode language=”emacs-lisp” title=”” ]
;; use msmtp
(setq message-send-mail-function ‘message-send-mail-with-sendmail)
(setq sendmail-program “msmtp”)
;; tell msmtp to choose the SMTP server according to the from field in the outgoing email
(setq message-sendmail-extra-arguments ‘(“–read-envelope-from”))
(setq message-sendmail-f-is-evil ‘t)

;; don’t keep message buffers around
(setq message-kill-buffer-on-exit t)
[/sourcecode]