mu というタグメールシステムを導入したので、導入手順をまとめます。
mu4e とは
mu とは、タグベースの高速検索メールシステムだ。
タグベースというところが気にいって、今回試してみた。
これまで、ファイルベースのメーラが世を席巻してきた。
しかし、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 を軽量化したメール送信用ツール
インストール方法
事前の依存ライブラリのインストール
# 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
mu のインストール
github から最新版の mu ををインストール。
./configure && make sudo make install
mu4e(Emacs Frontend Interface) の導入
mu をインストールすると、サブディレクトリに mu4e というものがあり その中に elisp が入っている。
(require 'mu4e)
(setq user-mail-address "xxx@gmail.com" user-full-name "xxx")
(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")
メールを受信する
2つのツールがある。
- offlineimap https://github.com/OfflineIMAP/offlineimap
- mbsync https://isync.sourceforge.net/mbsync.html
mbsync のほうがいい??
今回は、日本語情報の多い Offlineimap を使う。
Offlineimap
IMAP サーバーからメールを同期する Python ユーティリティ.
sudo apt-get -y install offlineimap
~/.offlineimaprc を作成する。 ここでは、Inbox と Notes と Drafts を同期するように設定している。
[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
ターミナルより、offlineimap を入力することで、メールボックスを同期できる。
パスワードをかくす
設定ファイルは github で管理したいのだが、パスワードを晒すわけにはいかない。 netrc が使える。
touch ~/.netrc chmod 600 ~/.netrc
.netrc の中身は次の通り。
machine imap.gmail.com
login xxx@gmail.com
password <your password here>
machine smtp.gmail.com
login xxx@gmail.com
password <your password here>
定期的に動作させる
できれば定期的に動作させたい。 以下で、5 分ごとにバックグラウンドでポーリングできる。
(setq mu4e-update-interval 300)
メール受信通知を受けたい
mu4e-alert という elisp がある。
(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)
メールを検索する
mu4e を開いて、更新 U を押すと、Offlineimap が走ってメールを受信し、 mu が走ってタグ付けされる。
helm-mu
helm I/F で検索できる。
(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)
メールを送信する
sendmail ライブラリが Emacs にデフォルトで搭載されていたけれども、 動かなかった。。。 msmtp を使う。
$ git clone git://git.code.sf.net/p/msmtp/code msmtp
$ cd msmtp $ autoreconf -i
$ ./configure; make; make install
.emacs の設定は以下の通り。
;; 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)