Mail 環境の設定
始めに
メールに関するアレコレ. ネットワーク接続を意識したくないので, 送受信用のサーバを手元に置いて MUA はなるべくここを叩くようにしている.
送信設定: Exim4
smarthost での送信だけなら Exim4 が軽量で楽。 他にも幾つか選択肢はある。気になるなら Debian Wiki: DefaultMTA あたり参照のこと。 欲しい機能は
- 上流の MTA への smarthost 送信。
- offline 時の queue
- localhost:25 での待受
なので、軽いしとりあえず Exim4 をそのまま使っている。
$ sudo -s # dpkg-reconfigure -plow exim4-config メール設定の一般的なタイプ: 2. スマートホストでメール送信; SMTP または fetchmail で受信する システムメール名: localhost 入力側 SMTP 接続をリスンする IP アドレス: 127.0.0.1 メールを受け取るその他の宛先: [空白] メールをリレーするマシン: [空白] 送出スマートホストの IP アドレスまたはホスト名: スマートホスト用の送信サーバ::587 送出するメールでローカルメール名を隠しますか? no DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)? no ローカルメールの配送方式: 1. /var/mail/ 内の mbox 形式 設定を小さなファイルに分割しますか?: no root と postmaster のメール受信者: 適当に設定
そのあと, /etc/exim4/passwd.client
内で, スマートホストの設定
そして必要なら /etc/exim4/email-addresses
に置換するリストを適当に記述.
最低限 root と ユーザ宛(uid=1000) のメール送信先は設定しておく.
$ sudo -s # upate-exim4.conf # sudo /etc/init.d/exim4 restart
あとは適当にテストとかしてみると良い.
(2020/04/27) このままだと message-id が "乱数列@hostname" になるので
/etc/exim4/exim4.conf.localmacros
に
を追加して update-exim4.conf
を走らせておく.
ローカル配送先を適宜設定したい場合には
などとしておく.
送信設定: msmtp
Wanderlust からメールを送る時には,
msmtp
を使っている.
sendmail コマンド互換かつ enverope-from に応じて送信に利用する
SMTP サーバを切り替えられる, というのが良い.
本当は Gmail に SMTP サーバを登録しておいて, exim4 の smarthost で
Gmail に丸投げしたかったのだけれど,
Gmail のメールサーバは Reply-To
を上書きしたりして行儀が良くない.
msmtp 自体の設定はいたって普通だが, queue が面倒?
結局 Emacs からは sendmail
として
を叩くことで, ネットワーク接続がある場合には即座に送信, 無い場合には queuing, という風に動作を切り替えている.
あとは NetworkManager の dispatcher として msmtp-runqueue を走らせれば良い.
受信
受信/閲覧は
- isync で、リモートの IMAP サーバのメールをローカルに Maildir 形式で保存
- ローカルで dovecot-imapd を起動してメールを閲覧
としている.
最近の MUA は多かれ少なかれ IMAP 接続でも手元にメールを持ってくるので, このメールの重複をなんとかしたいのだけれども, 例えば Wanderlust なんかで Maildir を直接見にいくと Emacs の反応があまり芳しくない.
以前 第247回 Offlineimap+Dovecotによる快適メール環境:Ubuntu Weekly Recipe なんて記事を書いた。 その時は offlineimap を使っていたのだけれども
- 遅い。特に 2014 年あたりから Gmail の同期が体感できるレベルで遅くなった
- 偶に block するし、imap の接続数が酷い事になる。
ということで、2015 年から isync: free IMAP and MailDir mailbox synchronizer に移行した。
TODO mbsync/isync
isync/mbsync はリモートの IMAP サーバとローカルの Maildir を同期するソフトウェア。
gmail の XOAUTH2
に対応するために libsasl2-module-xoauth2 なんてものを
パッケージ化していたりする. ←あとで書く.
インストール: mbsync/isync
実行バイナリは isync
もしくは mbsync
。以前の名前が isync
なので、Debian のパッケージ名はそのままである。
$ sudo apt-get install isync
apt 万歳
設定: mbsync/isync
設定ファイルは ~/.mbsyncrc
.
設定例は以下:
-
~/Maildir/
以下にサーバのメールを同期する -
~/Maildir/INBOX.mobile.XXX
に imap.mobile.com のメールを同期.- 明示的に
Pattern
を指定することで、指定ディレクトリ以外を同期しないことにする
- 明示的に
-
~/Maildir/INBOX.Gmail.XXX
に Gmail のメールを同期- 明示的に
Pattern
を指定することで、指定ディレクトリ以外を同期しないことにする -
[Gmail]/
というラベルを上手く扱えないので、同期チャンネルを複数設定することで対応- 今のところ SPAM 堕ちしたメールの確認のためだけに
~/Maildir/INBOX.Gmail.Junk
のみ確認している
- 今のところ SPAM 堕ちしたメールの確認のためだけに
- 明示的に
-
~/Maildir/INBOX
にwork.example.com
のメールを同期-
work.example.com
メールサーバのディレクトリがwork/2014
等と "/" 区切りになっているのでFlatten: .
でINBOX.work.2014
等に変換する。そのためにMaildirStore
を複数設定している -
Pattern: * !*mobile* !*Gmail*
で同期から除外するMaildir
を指定する
-
- PassCmd で gpg 暗号化した netrc 形式のファイルからパスワードを取得している.
- これ、User なんかにも使えないかなぁ、とか思ったり
今のところ特に使用に際して困った事はおきていない。
上手く設定できているなら
mbsync -l mobile
などとして、同期する Maildir
を確認すると良い。
リモートとローカルでどういうマッピングがされているかわかるだろう。
25万通(6.5G)の同期にだいたい 3 時間ぐらい。
回線速度に依存するだろうけれど、offlineimap より目に見えて速い(気がする)。
また、IMAP Pipeline で処理されているので、サーバ上の IMAP connection の数は 1 つのみだった。
cron での動作: mbsync/isync
認証に GPG を使っており、認証に Gnome Keyring を用いているので
必要な環境変数を読み込んでから実行するようにする.
先ず ~/bin/export_x_info.sh
を以下の内容で用意:
~/.config/autostart
以下に適当な名前で
を用意しておく.
あとは cron 実行時に ~/.Xdbus
を include するようにしておけば,
必要に応じて GnomeKeyring による認証が行なわれる.
cron で実行されるスクリプトは, 例えば
とか。mbsync 自体の timeout や PID 管理ができないので、 timelinit
コマンドで処理をするようにしている。
実際は、二回目以降の同期は(回線速度に依存するだろうけれど) 20 秒ぐらい。
dovecot
インストール: dovecot
最低限 IMAP での接続ができれば良いので
% sudo apt-get install dovecot-imapd
apt 万歳
設定: dovecot
最低限の設定として、
- localhost で起動. 認証は PAM に任せる(login パスワードと同じ)
- Maildir 形式で mbsync(もしくは offlineimap)で同期したMaildirを読む.
- IMAP もしくは IMAP over SSL のみ
ための設定を行なう
以下、設定ファイル中のコメント行を除いた部分だけを記載しているので注意 (コメント消すなんてとんでもない!)。
先ず待受サーバ。
どの IP アドレスで待ち受けるかは /etc/dovecot/dovecot.conf
にあるので
あたりを修正しておく。
認証は
/etc/dovecot/conf.d/10-auth.conf
内で
を有効に。include されている auth-system.conf.ext の中身は
だけが有効。これで pam 経由でパスワードログインするようになる.
次に Maildir の設定。 /etc/dovecot/conf.d/10-mail.conf
内で
あたりを修正しておく。
最後に IMAP over SSL の設定。 /etc/dovecot/conf.d/10-ssl.conf
で証明書の設定をする:
その後に /etc/dovecot/conf.d/10-master.conf
内の imap-login
部分を修正
これで再起動すると /etc/ssl/private
に置いた SSL 証明書を使って 127.0.1.1:993
で IMAP サーバが起動する。Listen を 127.0.0.1 に絞るなら SSL でのアクセスは不要かもしれない。
以下, obsolete
検索は mu (maildir-utils) を使うようになったし, メールの同期には mbsync を使うようになったので, 以下は昔のお話.
検索: Solr
Dovecot には FTS(Full Text Search) 用の plugin が幾つかある。 ここでは Solr を試してみる
とりあえず jetty で solar を動かすことに:
% sudo aptitude -R solr-jetty dovecot-solr
Jetty の起動設定は /etc/default/jetty8
にあるので
としておく。dovecot 用の scheme.xml は dovecot-solr
をインストールすると /usr/share/dovecot/solr-scheme.xml
にインストールされるので、これを /etc/solr/conf/scheme.xml
にコピー
% cd /etc/solr/conf % sudo cp scheme.xml scheme.xml.bak % sudo cp /usr/share/dovecot/solr-schemex.ml scheme.xml
その後で /etc/dovecot/conf.d/10-imap.conf
内の mailplugins 行に
を追加しておく。
IMAP でしか使わないのであれば 20-imap.conf
に指定すれば良いのだが、この場合は doveadm fts rescan -u USERNAME
ができない。
最後に /etc/dovecot/conf.d/90-plugin.conf
で
としておく。これで jetty8 および dovecot を再起動すると、検索が効く様になる…?
検索: Solr で日本語
scheme.xml
の修正が必要。
とりあえず
-
/etc/solr/conf/scheme.xml
よりtext_cjk
およびtext_ja
の部分を抜き出して, dovecot の提供していたscheme.xml
に追加 -
hdr,body,subject
をtext_cjk
で解析するように
してみた.
diff は以下:
offlineimap
(2015/05/10) 以前使っていた時のメモ。もう使わないけれど、たまに検索でココを見に来ている人がいるみたいなので、残しておくことに。 OfflineIMAP は,ネットワーク上にあるIMAPサーバと手元のMaildir/IMAPサーバの同期を取るためのソフトウェア.
- インストール: offlineimap
apt万歳, ってことで.
$ sudo apt-get install offlineimap
- 設定: offlineimap
現状, 以下の通り:
-
OfflineIMAP のメタ情報は
~/Mail/offlineimap
以下に格納 - 同期するサーバは二箇所:
- Main サーバのメールは
~/Mail/imap
以下に格納.- この際, IMAP Namespace である
INBOX.
を除外してMaildir
を作成 -
~/Mail/imap/[Gmail]
は同期しない
- この際, IMAP Namespace である
- Gmail のメールは
~/Mail/imap/[Gmail]/
以下に格納
- Main サーバのメールは
offlineimap_utils.py
の中身は以下の通り:IMAP の名前空間が複雑な(?)場合には, 適宜正規表現を追加すると良い.
-
OfflineIMAP のメタ情報は
- cron での動作: offlineimap
認証に GnomeKeyring を使っているので
DBUS_SESSION_BUS_ADDRESS
を設定してから 実行するようにする. 先ず~/bin/export_x_info.sh
を以下の内容で用意~/.config/autostart
以下に適当な名前でを用意しておく.
あとは cron 実行時に
~/.Xdbus
を include するようにしておけば, 必要に応じて GnomeKeyring による認証が行なわれる. cron で実行されるスクリプトは, 例えばとか.