Mutt に乗り換え

結局乗り換えてしまった.「返信ヘッダが気に食わない」という理由だけでw
さて,インストールやら設定やらについては,基本的にGentoo のドキュメントに従って,また少々古いもののこんな親切な PDF 文書を見ながら行ったんで,果たして俺がわざわざ改めて書く必要があるのか否か激しく疑問だけどまぁ良いや.

メールサーバからメールを受信するために fetchmail を,メールを振り分けるために MDA 兼フィルタである Procmail を,メールの閲覧やら作成やらをするために MUA である Mutt を,メールを送信するために MTA または送信専用プログラムを,それぞれインストールし設定する必要がある.うへぇ.

ここで「MTA または送信用プログラム」に関して覚え書き.

Gentoo ではシステムのパッケージが sSMTP に依存しているらしく,既にインストール済みの状態.「依存している」って事は,そのパッケージが sSMTP を使って何らかの (ログ ?) メールを送信しようとするんだろう.でも勝手に送信されると研究室内で少々迷惑な事になる (なった) らしい.なので,sSMTP はインストールしたままだけども「メールを送信しない」と設定しておく必要がある.

ということで,いちユーザがメールを送信するためには sSMTP 以外のプログラムを使うことになるんだけど,USE フラグ mailwrapper を有効にしておかないと sSMTP とは共存できないようになっている.なので,以下の記述を /etc/portage/package.use に書き加えておく.ここでは sSMTP 以外の送信用プログラムとして nullmailer を選んだ.


mail-mta/nullmailer mailwrapper
mail-mta/ssmtp mailwrapper

USE フラグを書き換えたので,sSMTP を再インストールするために --newuse オプションをつけて emerge 実行.


$ sudo emerge --newuse -vaD fetchmail procmail mutt ssmtp nullmailer

インストール終了直後,/etc/mail/mailer.conf の編集を要求される (されたはず.多分.etc-update で).これはシステムが使う送信用プログラムの実体を指定するためのファイルなので,sSMTP 以外のプログラムに関する行をコメントアウトしとく.

さぁ,インストールは終わったんで,ここからは各プログラムの設定だ.
……面倒になってきたからレシピファイルを晒すだけでいいよね ? (´・ω・`)

.fetchmailrc

# Global options
set daemon 300              # 5 分おきに fetch
set syslog

# Primary mail server
poll mail.xxxxxx            # メールサーバの FQDN
    protocol apop
    username "user"         # 一応 架空のユーザ名ということで
    password "********"     # パスワード (平文 !)
#   keep
    mda "procmail -d %s"
  • パスワードを平文で直接書いてしまうんで,.fetchmailrc のパーミッションは 600 にすべし.
  • 使う MDAmda キーワードにセットすべし.
.procmailrc

# Variables
MAILDIR=$HOME/.maildir/
#DEFAULT=$HOME/var/spool/mail/
LOGFILE=$HOME/var/log/procmail.log

# SPAM
:0 H
* ^X-Spam-Flag: yes
* ^Subject: \[SPAM\]
inbox/spam/

# From Outlook Express
:0 H
* ^X-Mailer: .*Microsoft Outlook Express.*
inbox/from_OE/

# Default
:0
inbox/
  • 一応,公開しても問題なさそうなものだけを書いとくw
  • 振り分け先ディレクトリ名の末尾に / が付いてると,Procmail はそのディレクトリが Maildir 形式であると分かってくれるらしい.
  • 今のところ,Outlook Express で送られてきたメールは全て怪しげなヤツだけ.いやぁ,皆さん良く分かってるねぇw
.muttrc

# Character encodings
set send_charset="us-ascii:iso-2022-jp"
set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"
set thorough_search=yes

# MTA
set sendmail="/usr/bin/nullmailer-inject"
set envelope_from=yes

# User information
set realname="Yoshinori IIHOSHI"
set from="user@host.domain"     # 一応 架空のアドレスということで
set hostname="host.domain"      # 一応 架空のホスト名ということで
set signature="$HOME/local/doc/signature.txt"

# Mailbox type and Folders
set mbox_type=Maildir
#set spoolfile="$HOME/var/spool/mail/"
set folder="$HOME/.maildir/"
set mbox="+inbox"               # for received mails
set record="+outbox"            # for sent mails
set postponed="+postponed"      # for will-send mails
set tmpdir="$HOME/tmp/"
mailboxes =inbox
mailboxes =inbox/spam
mailboxes =inbox/from_OE
# 一部省略

# Editor
set edit_headers=yes
set fast_reply=yes
set forward_edit=no
set include=yes

# Pager
set pager_index_lines=5
set tilde=yes

# Formats

set attribution="On %d,\n%f wrote:"             # 返信ヘッダの書式
set date_format="!%a, %d %b %Y at %H:%M:%S %Z"  # 日時の書式
set index_format="%4C %Z %{%b %d} %-15.15L %s"  # メッセージ一覧表示の書式
set folder_format="%2C %t %N %8s %d %f"         # ディレクトリ一覧表示の書式
set forward_format="Fwd: %s"                    # 転送メールのタイトルの書式


# Header
ignore *
unignore date from to cc subject
hdr_order date subject from to cc


# Colors

color   normal      white       default

# Header
color   hdrdefault  cyan        default
color   header      brightcyan  default "^from:"
color   header      brightcyan  default "^subject:"

# URI like HTTP
color   body        cyan        default "[a-z]+://[-A-Za-z_0-9\\,./\?&=]+"
mono    body        underline           "[a-z]+://[-A-Za-z_0-9\\,./\?&=]+"

# E-mail address
color   body        cyan        default "[-a-z_0-9\\.]+@[-a-z_0-9\\.]+"
mono    body        underline           "[-a-z_0-9\\.]+@[-a-z_0-9\\.]+"

# IP address
color   body        cyan        default "([0-9]{1,3}\\.){3}[0-9]{1,3}"
mono    body        underline           "([0-9]{1,3}\\.){3}[0-9]{1,3}"

# Quoted body
color   quoted0     blue    default
color   quoted1     green   default

color   signature   blue    default
color   tilde       blue    default

color   underline   cyan        default
color   error       brightred   default
mono    error       bold
color   indicator   brightwhite black
color   attachment  green       default
#color  status      black       cyan
#mono   status      bold
#color  tree        yellow      blue
#color  message     green       black
  • 俺自身 よく分からないままに設定しているものがあるので注意.
  • Mutt が使う送信用プログラムのパス (ここでは /usr/bin/nullmailer-inject) を sendmail 変数にセットすべし.
  • mbox_type 変数に Maildir をセットした場合 = メールボックスの形式に Maildir を選んだ場合,mailboxes 変数で指定した各ディレクトリの直下に cur, new, tmp という名前のディレクトリをそれぞれ作成する必要がある.
  • .procmailrc と .muttrc とでディレクトリの設定の辻褄が合ってないと当然ダメ.
  • 書式の指定がかなり柔軟にできちゃうぜ.すげー.
  • 色付けに関してはよく分かってないものが多い.
/etc/nullmailer/remotes

mail.****** smtp    # メールサーバの FQDN

んで後は,デーモンとして動かすべきものを自動で起動するように設定すれば良い.

但し fetchmail に関しては注意が必要./etc/init.d/fetchmail を見れば分かる通り,/etc/fetchmailrc なる設定ファイルが存在しないと起動しないようになっている.しかしそんなファイルがない.新規作成するにしてもどういう記述をすべきものなのか知らない.じゃあ良いや,スクリプトの方を書き換えてしまえ,てことで,このページを参考に修正.


--- fetchmail.orig  2007-03-15 17:11:06.000000000 +0900
+++ fetchmail       2007-03-15 17:20:19.000000000 +0900
@@ -12,18 +12,31 @@
         fi
 }
 
+# ref.: http://blogs.dion.ne.jp/shadow/archives/1932055.html
 start() {
-        checkconfig || return 1
-
         ebegin "Starting fetchmail"
-        start-stop-daemon --start --quiet --exec /usr/bin/fetchmail \
-                -- -d ${polling_period} -f /etc/fetchmailrc
+        for user in `ls /home`
+        do
+                if [ -f /home/$user/.fetchmailrc ]
+                then
+                        einfo "  fetchmail for $user starting..."
+                        su $user -c "/usr/bin/fetchmail"
+                fi
+        done
         eend ${?}
 }
 
+# ref.: http://blogs.dion.ne.jp/shadow/archives/1932055.html
 stop() {
         ebegin "Stopping fetchmail"
-        start-stop-daemon --stop --quiet --pidfile /var/run/fetchmail.pid
+        for user in `ls /home`
+        do
+                if [ -f /home/$user/.fetchmailrc ]
+                then
+                        einfo "  fetchmail for $user stopping..."
+                        su $user -c "/usr/bin/fetchmail --quit"
+                fi
+        done
         eend ${?}
 }
  • ~/.fetchmailrc の方で set daemon 300 などと記述していれば,コマンドライン引数を与えなくともデーモンモードで起動するのでこれで OK.

$ sudo eselect rc start fetchmail
$ sudo eselect rc add fetchmail default

初期化スクリプトの起動/停止・ランレベルへの追加/削除くらいだったら eselect は逆に面倒臭い気もするなぁ,自分で書いておきながら.

……あーーー.ようやくこれで全部書いたかね.抜けとか誤りがあれば発覚したその都度に修正することにしよう.

これくらいの長さの文書になると,きちんと章立てして hn 要素で見出しもきちんとつけて書くべきなんだろうけど (のぺ~っとしてて読みにくいし),レイアウト的にどうなっちゃうのか検証してないし するのも面倒なんで,今は放置.