メールのやりとりをシンプルに。メール専用アプリへの“回帰”のすすめ という記事を読んでターミナルで動作するメーラー NeoMutt の存在を知りました。
ひとまず、メールが読めるようになるまでの設定を行いました。
NeoMutt とは#
- NeoMutt はターミナル上で動作するメーラーです。MUA(Mail User Agent)に分類されるソフトウェアです。
- メールに関わるサブシステム MxA については mutt + notmuch でコマンドラインメール送受信環境を構築する(Mac OS X編) が詳しいです。
必要なソフトのインストール#
1$ brew install neomutt w3m gnupg
本筋とは異なりますが、パスワードを書き込んだファイルを削除するためのコマンドを利用するために以下もインストール:
1$ brew install coreutils
設定手順#
ディレクトリの作成#
以下の3つのディレクトリを作成ししておきます:
- メールヘッダ用のキャッシュディレクトリ:
~/.mutt/cache/headers/
- メール本文用のキャッシュディレクトリ:
~/.mutt/cache/bodies/
- CA証明書を格納するディレクトリ:
~/.mutt/certificates/
パスワードファイルの作成#
メールのパスワード設定を設定ファイルに直接書き込むわけにはいかないので、暗号化しておきます。
平文でパスワードを passwds ファイル(ファイル名は任意)に記載します:
passwd ファイルの中身は以下のような感じです:
Gmail を利用する場合は、 こちらの記事を参考に作成したアプリパスワードを利用します。
暗号化のための鍵の作成#
gpg コマンドを利用して、上記パスワードファイルを暗号化するための鍵を作成します。
- 鍵の名前は適当に見分けがつくものをつけておきます(「本名」とありますが、本名でなくて良いです)。
- メールアドレスも適当に入力してOKです(実際に設定するメールアドレスでなくても良いです)。
- パスフレーズの入力を求められます。入力した場合は、 neomutt のセッションごとの初回起動時にパスフレーズの入力を求められるようになります。省略することも可能です。
1$ gpg --gen-key
2gpg (GnuPG) 2.3.8; Copyright (C) 2021 Free Software Foundation, Inc.
3This is free software: you are free to change and redistribute it.
4There is NO WARRANTY, to the extent permitted by law.
5
6注意: 全機能の鍵生成には "gpg --full-generate-key" を使います。
7
8GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。
9
10本名: [ユーザーID]
11電子メール・アドレス: [メールアドレス(適当に)]
12次のユーザIDを選択しました:
13 "[ユーザーID] <[メールアドレス]>"
14
15名前(N)、電子メール(E)の変更、またはOK(O)か終了(Q)? o
16たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
17す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
18成器に十分なエントロピーを供給する機会を与えることができます。
19たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
20す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
21成器に十分なエントロピーを供給する機会を与えることができます。
22gpg: 失効証明書を '/Users/[ユーザー名]/.gnupg/openpgp-revocs.d/XXXXXXXXXXXXXXXXXXXXXXXX.rev' に保管しました。
23公開鍵と秘密鍵を作成し、署名しました。
24
25pub ed25519 202x-xx-xx [SC] [有効期限: 202x-0x-0x]
26 84E05B17D857C0081B27A73D3E9FB07D995CDF94
27uid [ユーザーID] <[メールアドレス]>
28sub cv25519 202x-xx-xx [E] [有効期限: 202x-xx-xx]
鍵を利用してパスワードファイルを暗号化#
以下のコマンドを実行します。「ユーザーID」は上記で作成した鍵のユーザーIDを利用します。
1$ gpg -r [ユーザーID] -e ~/.config/neomutt/passwds
2gpg: 信用データベースの検査
3gpg: marginals needed: 3 completes needed: 1 trust model: pgp
4gpg: 深さ: 0 有効性: 11 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 11u
5gpg: 次回の信用データベース検査は、202x-xx-xxです
暗号化されたファイルが作成されていることを確認します( passwds.gpg
が暗号化されたファイル):
平文でパスワードが記載された passwds は不要なので、以下のコマンドでランダム文字列にを書き込んでから削除する(gshred コマンドは coreutils を入れると付いてきます):
1$ gshred -u ~/.config/neomutt/passwds
NeoMutt の設定ファイルを作成#
NeoMutt の設定ファイルを以下のような構成にします。今回は、複数アカウント(アカウント1は Gmail, アカウント2は一般のメールアドレスとします)の設定をします:
1~/.config
2`-- neomutt
3 |-- neomuttrc # NeoMutt 全体の設定
4 |-- account1 # アカウント1(Gmail)固有の設定を記述するファイル
5 |-- account1_passwds.gpg # アカウント1のパスワードファイル(暗号化済み)
6 |-- account2 # アカウント2(一般)固有の設定を記述するファイル
7 `-- account2_passwds.gpg # アカウント2のパスワードファイル(暗号化済み)
全体の設定内容(~/.config/neomutt/neomuttrc
)#
1########################
2# メーラー基本設定 #
3########################
4# サイドバーの表示
5set sidebar_visible = yes
6
7# サイドバーの書式
8set sidebar_format = "%B%?F? [%F]?%* %?N?%N/?%S"
9
10# 定期的にメールの状態をチェック
11set mail_check_stats
12
13# 日付の降順でメール一覧を表示
14set sort_aux = reverse-date
15
16# メールのFromヘッダを自動生成ON
17set use_from = yes
18
19# メールを書く時のエディタ
20# 環境変数EDITORに従う場合、`echo \$EDITOR`と記載
21set editor = "nvim"
22
23# Terminal(およびメール送信時)で使用する文字コード
24set charset = "utf-8"
25
26# 文字コード指定がない場合のため、優先順位を設定
27set assumed_charset = "utf-8:iso-2022-jp:euc-jp:shift_jis"
28set attach_charset = "utf-8:iso-2022-jp:euc-jp:shift_jis"
29
30# メールの保存形式の指定
31# mbox=複数のメッセージが連結した形式で保存
32# maildir=mail1通がファイル1個
33set mbox_type = "maildir"
34
35# CAの証明書の格納先(接続先の認証ファイル)
36set certificate_file = "~/.mutt/certificates"
37
38# mailcapには、w3mを使ってHTMLメールを読む設定を記載
39set mailcap_path = "~/.mutt/mailcap"
40auto_view text/html
41set new_mail_command="notify-send --icon='/usr/share/icons/hicolor/48x48/apps/neomutt.png' 'New Email' '%n new messages, %u unread.' &"
42
43# インデックスフォーマット デフォルト"%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s"
44set index_format="%4C %Z %<[y?%<[d?%[%H:%M ]&%[%m/%d (%a) %H:%M]>&%[%Y/%m/%d %H:%M]> %-15.15L (%?l?%4l&%4c?) %s"
45
46##############################################################
47# キャッシュ設定(キャッシュ先ディレクトリを事前に作成する事) #
48##############################################################
49set header_cache = "~/.mutt/cache/headers" # headerキャッシュのPATHを指定
50set message_cachedir = "~/.mutt/cache/bodies" # IMAP経由で受信したメッセージのキャッシュPATHを指定
51
52##############################################################
53# アカウント別設定
54##############################################################
55
56# ---
57# アカウント1の設定
58source "~/.config/neomutt/account1"
59# Here we use the $folder variable that has just been set in the sourced file.
60# We must set it right now otherwise the 'folder' variable will change in the next sourced file.
61folder-hook $folder 'source ~/.neomutt/account1'
62
63# ---
64# アカウント2の設定
65source "~/.config/neomutt/account2"
66folder-hook account2/ 'source ~/.neomutt/account2'
アカウント1の設定内容(~/.config/neomutt/account1
)#
1source "gpg -d ~/.config/neomutt/account1_passwds.gpg |" # 暗号化したパスワードを読み込み
2
3## Receive options.
4set imap_user = "hoge@gmail.com" # 受信設定(IMAP=メールをサーバ管理)
5set folder = "imaps://hoge@gmail.com@imap.gmail.com:993" # 受信メールの読み込み先(993番ポート=SSL対応)
6set spoolfile = "+INBOX"
7mailboxes = "+INBOX"
8set postponed = "+Drafts"
9unset record
10
11## Send options.
12set smtp_url = "smtps://hoge@gmail.com@smtp.gmail.com:465"
13set realname = "hoge"
14set from = "hoge@gmail.com"
15set hostname = "gmail.com"
16set signature = "[署名]"
17
18# Connection options
19set ssl_starttls = yes # 受送信メールサーバまでの通信を暗号化
20set ssl_force_tls = yes # SSLを次世代規格のTLSに強制的に変更
21
22## Hook -- IMPORTANT!
23account-hook $folder "set imap_user=hoge@gmail.com"
アカウント2の設定内容(~/.config/neomutt/account2
)#
1source "gpg -d ~/.config/neomutt/account2_passwds.gpg |" # 暗号化したパスワードを読み込み
2
3my_hdr From: [表示名] <[メールアドレス]>
4
5## Receive options.
6set imap_user = "[メールサーバーのユーザー名]" # 受信設定(IMAP=メールをサーバ管理)
7set folder = "imaps://[メールサーバーのアドレス]:993" # 受信メールの読み込み先(993番ポート=SSL対応)
8set spoolfile = "+INBOX"
9mailboxes = "+INBOX"
10set postponed = "+Drafts"
11set record = "+Sent"
12
13## Send options.
14set smtp_url = "smtps://[メールサーバーのアドレス]:587"
15set realname = "[本名]"
16set from = "[メールアドレス]"
17set hostname = "[ホスト名]"
18set signature = "[署名]"
19
20# Connection options
21set ssl_starttls = yes # 受送信メールサーバまでの通信を暗号化
22set ssl_force_tls = yes # SSLを次世代規格のTLSに強制的に変更
23
24## Hook -- IMPORTANT!
25account-hook $folder "set imap_user=[メールサーバーのユーザー名]"
- メールサーバーのドメインはレンタルサーバー会社によって異なりますので、各自で確認して設定してください。
- 私が利用しているレンタルサーバーで独自ドメインを設定している場合は
[ユーザー名]@[独自ドメイン]@[レンタルサーバーの初期ドメイン]
のようになりました。
- 私が利用しているレンタルサーバーで独自ドメインを設定している場合は
- メールサーバーのユーザー名もレンタルサーバー会社によって異なりますので、各自で確認して設定してください。
起動#
ここまで設定できたら、 neomutt
コマンドでメーラーが起動できます。
初回起動時はキャッシュの取得のため起動に時間がかかります。c ?
でアカウントの切り替えが可能です。
基本的な操作については割愛します。
課題#
メールの受信・削除などはできますが、メールの送信をすると文字コードの設定がうまくいっておらず、受信側で文字化けしてしまいますので、今後修正したいと思います。
参考資料#
- 端末(ターミナル)で動くメーラーNeoMuttを使ってみる
- 基本的な設定方法(特にパスワード設定方法)を参考にしました。
- mutt + notmuch でコマンドラインメール送受信環境を構築する(Mac OS X編)
- mutt の概要や考え方について参考にしました。
- 環境構築:Terminal(CLI)向けメーラー”Neomutt”でGmailを送受信するための設定
- 設定ファイルの内容について大いに参考にしました。
- Mutt - Arch Linux Wiki
- 設定や操作方法について参考にしました。