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つのツールがある。

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)

参考