Maildirの仕様について

Unix系OSでメールサーバをたてる場合、Postfix,Sendmail,qmailを採用することが多い。
そして大抵、受信メール格納には、Maildirを利用する。

そもそも、このMaildirとはなにか?
メールはどんな風にしてMaildirに格納されるのか? ほんの少しだけ紐解いてみる。

Maildirとは

Wikipediaの概要から要点だけ抜き出すと…

・Maildirは、広く使われている電子メール格納フォーマットの一種
・個々のメッセージは個別のファイルとして一意な名前付きで保持
・Maildirサブディレクトリとして tmp、new、cur がある。
@Wikipedia

Maildirサブディレクトリと配送

受信メールは下記ディレクトリに状態に応じて振分けされる。

未読メール  /home//Maildir/new
既読メール  /home//Maildir/cur
配送中メール /home//Maildir/tmp

・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なのに、メールが落ちてこない状態であれば、
この辺を探ってみれば解決するかもしれない。

Leave a Reply

Your email address will not be published. Required fields are marked *