Unix系OSでメールサーバをたてる場合、Postfix,Sendmail,qmailを採用することが多い。
そして大抵、受信メール格納には、Maildirを利用する。
そもそも、このMaildirとはなにか?
メールはどんな風にしてMaildirに格納されるのか? ほんの少しだけ紐解いてみる。
Maildirとは
Wikipediaの概要から要点だけ抜き出すと…
・Maildirは、広く使われている電子メール格納フォーマットの一種
・個々のメッセージは個別のファイルとして一意な名前付きで保持
・Maildirサブディレクトリとして tmp、new、cur がある。
@Wikipedia
Maildirサブディレクトリと配送
受信メールは下記ディレクトリに状態に応じて振分けされる。
未読メール | /home/ |
---|---|
既読メール | /home/ |
配送中メール | /home/ |
・tmp→new→curの順でメールデータが移動する。
・メールクライアント(Outlook等)で、メール受信した際の挙動は、
「サーバにメールを残す」設定した場合、new→curに格納
そうでない場合は、newから削除
個別メールのファイル名
testユーザーのcurを一覧表示してみると下記のようになっている。
# ll /home/test/Maildir/cur/
-rw------- 1 test test 3696 Jul 14 11:33 1279074839.V302I80001M709989.test.example.com:2,S
-rw------- 1 test test 81540 Jul 14 12:05 1279076747.V302I80002M649647.test.example.com:2,
・
・
・
このファイル名の定義はどうなっているのか?
dovecotのwikiに下記に記載されている。
標準のファイル名の定義は、”
:2, ” です。
ex. ‘1035478339.27041_118.foo.org,S=1000,W=1030:2,S’
flagについては、cr.yp.toに解説があるが、
これを和訳したものを発見した。(どこで発見したのか不明…)
info が “1,” で始まるとき: 実験的セマンティクス。
info が “2,” で始まるとき: コンマに続く各文字は独立したフラグを表します。* フラグ “P” (passed): ユーザがこのメッセージを誰か他の人へ再送/転送/バウンスした。
* フラグ “R” (replied): ユーザがこのメッセージに返信した。
* フラグ “S” (seen): ユーザはこのメッセージを閲覧した。とはいえ、最後まで読み通してはいないかもしれない。
* フラグ “T” (trashed): ユーザはこのメッセージをゴミ箱に移した。ゴミ箱は後日、ユーザの手で空にされることになる。
* フラグ “D” (draft): ユーザはこのメッセージを下書きとみなしている。これはユーザの裁量で切替えられる。
* フラグ “F” (flagged): ユーザ定義フラグ。ユーザの裁量により切替えられる。今後、新しいフラグが定義されるかもしれません。なお、フラグは ASCII 順に付けられなくてはなりません。例 “2,FRS”
以前、メールクライアントで、メール送受信したらサーバ接続エラーになったことがある。
よく調べると、curディレクトリに”,S”の付くメール以降、全て受信できていなかった。
この”,S”の付くメールを他ディレクトリへ退避したところ、それ以降のメールは正常に受信できた。
メールサーバが正常に動作していて、mailqがemptyなのに、メールが落ちてこない状態であれば、
この辺を探ってみれば解決するかもしれない。