NeoMutt

NeoMuttはmuttに機能を追加した、 CUIのメールクライアントである。 tmux上ですべてを完結させたいのであれば、 こういうものを使うのもまた一つの選択肢だと思う。

インストール

FreeBSD

# pkg install neomutt

NetBSD

# cd /usr/pkgsrc/mail/neomutt
# make install clean clean-depends

もしpkgsrcからインストールするのであれば、 SMTP認証のためにsecurity/cy2-plainsecurity/cy2-digestmd5なども 併せてインストールする。

IMAP設定

単純に、IMAPで単一のGmailアカウントを使う場合、 以下のような設定を$HOME/.muttrcに書く。 "%%%%"で囲われている箇所は適宜変更する。 Googleアカウントに二段階認証を設定している場合は、 アプリパスワード をパスワードとして扱えばよい(%%password%%の箇所に書く)。

# Password
set my_user = "%%username@mailadress%%"
set my_pass = '%%password%%'

# IMAP
set folder = "imaps://$my_user@imap.gmail.com:993"
set imap_pass = "$my_pass"
set spoolfile = +INBOX
mailboxes = +INBOX
set header_cache = $HOME/.mutt/header_cache
set postponed = +[Gmail]/Drafts
set record = +Sent

パスワードをGnuPGで暗号化して保存する

平文の設定ファイルにパスワードを書くのは、セキュリティ的な観点から望ましくない。 そこで、パスワードの記述のみGnuPGで暗号化し、 パスワード認証が求められたさいに自身の秘密鍵で復号化する手法を採用する。

GnuPGの公開鍵と秘密鍵の作り方は割愛する。

まず上記の設定ファイル$HOME/.muttrcから、 set my_pass = ...の行を切り取り任意のファイルへ書き込む。 ここではファイル名をpasswd.txtとする。

パスワードが平文で書かれたファイルをディスク上に残さないため、 揮発性メモリ上の、tmpfsがマウントされているディレクトリ内に作る。

$ df -h
Filesystem         Size       Used      Avail %Cap Mounted on
/dev/wd0a          108G        21G        82G  20% /
kernfs             1.0K       1.0K         0B 100% /kern
ptyfs              1.0K       1.0K         0B 100% /dev/pts
procfs             4.0K       4.0K         0B 100% /proc
tmpfs              3.9G        12K       3.9G   0% /var/shm
$ cat /var/shm/passwd.txt
set my_pass = '%%password%%'

この例では、passwd.txt/var/shm内に作成している。 文法がneomuttの設定ファイルと同じであることに注意してほしい。

続いて、このファイルをGnuPGで暗号化する。

$ gpg2 --encrypt -r %%user%% /var/shm/passwd.txt

GnuPGをpkgsrcからインストールする場合、 security/gnupgsecurity/gnupg2のどちらかだ。 ここでは後者を採用しているため、実行コマンドがgpgではなくgpg2となっている。 また、-rオプションに渡すユーザ名は適宜変更すること。

実行後、/var/shm/passwd.txt.gpgが作成されている。 これを$HOME/.mutt/passwd.txt.gpgへコピーする。

$ mkdir $HOME/.mutt
$ cp /var/shm/passwd.txt.gpg $HOME/.mutt/

設定ファイル$HOME/.muttrcを編集し、 このファイルを復号化した結果を取り込むように設定する。

# Password
set my_user = "%%username@mailadress%%"
source "gpg2 -dq $HOME/.mutt/passwd.txt.gpg |"

# IMAP
...snip...

復号化コマンドの最後に、空白を1つ開けて"|"(パイプ)があることに注意してほしい。

設定がうまくいっていれば、 neomutt起動時に復号化のために必要なパスフレーズを要求される。

SMTP設定

Gmailでメールを送信したい場合、以下のように設定する。 この設定は上述した$HOME/.muttrcに追記するものとする。

# SMTP
set realname = "%%Your Real Name%%"
set from = $my_user
set use_from = yes

set smtp_url = "smtps://$my_user:$my_pass@smtp.gmail.com/"
set ssl_force_tls = yes
set ssl_starttls = yes
# If smtp_authenticators is ``unset'' (the default)
# NeoMutt will try all available methods,
# in order from most-secure to least-secure.
unset smtp_authenticators

set realnameの箇所は適宜変更すること。

neomuttは最もセキュアな認証方式から順に試行するという設定が標準になっているため、 あえてsmtp_authenticatorsunsetしてある(manより)。

GnuPGによる暗号化や署名をおこなう

share/doc/neomutt/samplesつまりpkgsrcからインストールしたのであれば、 /usr/pkg/share/doc/neomutt/samplesgpg.rcというファイルがある。 これを$HOME/.muttへコピーする。

$ cp /usr/pkg/share/doc/neomutt/samples/gpg.rc $HOME/.mutt

GnuPGがsecurity/gnupg2であれば、$HOME/.mutt/gpg.rcを編集し、 gpgを実行しているコマンドをすべてgpg2に置き換える。 差分は以下のようになる。

$ diff -u /usr/pkg/share/doc/neomutt/samples/gpg.rc .mutt/gpg.rc
--- /usr/pkg/share/doc/neomutt/samples/gpg.rc   2018-04-30 17:30:53.000000000 +0900
+++ .mutt/gpg.rc        2018-05-06 15:55:50.000000000 +0900
@@ -59,27 +59,27 @@

 # decode application/pgp
 #
 -set pgp_decode_command="gpg --status-fd=2 %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
 +set pgp_decode_command="gpg2 --status-fd=2 %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --quiet --batch --output - %f"

...snip...

メール作成時にpを入力すると、メールの暗号化や署名のオプションを選択できる。

参考文献