【メール】Maildir と Mailbox の解説

メールボックスの代表的な形式である Maildir Mailbox について解説します。

また、「Maildir」「Mailbox」の違いや find コマンドと cron によるメールファイルの運用方法について解説しています。

 

メール環境の構築方法は以下の記事を参考にしてください。

 

【Linux】 CentOS7環境で自宅メールサーバーの構築(Postfix と Dovecot と OP25B問題)

 

 

 

 

 

メールボックスとは?

メールボックスとは「電子メールの配信先」のことを言います。

よくメールボックスに例えられるのが、「自宅の郵便受け」です。

 

 

郵便配達人は、手紙を郵便受けに投かんします。

その家の住民が、自宅に投かんされた手紙を受け取ります。

 

メールボックスに配信されたメールを、ユーザーが取り込むときに「POP」や「IMAP」といったプロトコルが利用されます。

 

POP(Post Office Protocol)とは

現在 POP と言えば「POP3」を意味します。

POP はメールを手元に取り込むためのシンプルな手順で、サーバーの負荷も軽く高速な処理が可能です。

その代り、一旦ローカルコンピュータに受信したメールの管理は、すべてローカルコンピュータのメールクライアントソフト「Thunderbird」「Microsoft Outlook」などで行います。

POP はサーバーのメールボックスからメールを手元に受信してしまうため、複数の人間が同一メールアカウントを利用する場合に管理が複雑になります。

例えば、同一アカウントを利用しているAさんとBさんがいるとすると、Aさんがメールを受信すると、Bさんは受信できなくなるなど。

 

 

IMAP(Internet Message Access Protocol)とは

IMAP は 上記のような POP の弱点(複数人で同一アカウントを利用するのに不便)を解決するために開発されたプロトコルです。

現在のバージョンは「IMAP4」です。

IMAP はメールの管理をサーバー側で行ないます。

具体的には以下のメールボックスの処理をサーバー側で行ないます。

 

IMAP では「メール」と「状態(ステータス)」をサーバー側が保存しているため、コンピュータだけでなく、スマートフォンや他のメールクライアントツールが複数ある場合でも中央管理ができます。

 

 

 

Maildir と Mailbox

メールボックスの代表的な形式には「Maildir」と「Mailbox」があります。

「Maildir」と「Mailbox」の違いは、ユーザー宛に送信されてきたメールの保管方法にあります。

 

Mailbox の場合

当初は Mailbox の形式が利用されていました。

Mailbox 形式は、複数のメッセージが1つのファイルに連結された形式で保存されるため、大きなファイルとなります。

ここのメッセージは「CR+LF」で 1つの区切りとされます。

ちなみに「CR+LF」の「CR」は「キャリッジリターン(Carriage Return、復帰という意味)」と読みます。

「LF」は「ラインフィード(Line Feed、改行という意味)」と読みます。

「CR+LF」で「復帰改行」と言います。

つまり、メモ帳などで文字を入力して「Enter」キーを押下すると、カーソルが行頭に戻り且つ1行下に進むことを「復帰改行」と言います。

 

Mailbox(mbox)形式のファイルはサーバー上のスプール領域に配置されます。

メールスプールとはメールサーバー上のメールのバッファ領域(一時的に保管する場所)のことを言います。

プリンタサーバーにもスプール領域がありますが、メールのスプールディレクトリと同様に一時的なプリンタデータのバッファ領域として利用されます。

 

メールスプールにあるメールは、メールクライアントがダウンロードするまでサーバー上に保管され続けます。

そのため、メールクライアントがメールを受信しなければ遅かれ早かれサーバーのディスク容量は圧迫されます。

 

Mailbox(mbox)形式のファイルは具体的には

などのように「/var/spool/mail/」ディレクトリ配下に各アカウント用に 1ファイルずつあります。

 

以下は例ですが、それぞれのアカウントごとに同じアカウント名のメールボックスファイルが作成されています。

所有者は各アカウントでグループ「mail」もそれぞれのメールボックスファイルの「読み取り・書き込み」権限を持っています。

※rootのメールボックスファイルだけは mail グループでも「読み取り・書き込み」権限はありません。

[root@SAKURA_VPS mail]# ls -lh 
合計 784K 
-rw-rw---- 1 a_test         mail    0  6月 16  2017 a_test  
-rw-rw---- 1 c_test         mail    0  4月 26  2017 c_test 
-rw-rw---- 1 web01          mail    0  4月 19  2017 ftptestuser 
-rw-rw---- 1 web01          mail    0  4月 19  2017 ftpuser 
-rw-rw---- 1 mailtestuser01 mail  578  4月 11  2017 mailtestuser01 
-rw-rw---- 1 ma             mail    0  1月 28  2017 ma 
-rw------- 1 root           mail 767K 12月 11  2017 root 
-rw-rw---- 1 test           mail 4.8K 12月 10  2017 test 
-rw-rw---- 1 web01          mail    0  4月 24  2017 web01

 

もちろん、それぞれのファイルには対応するアカウントの所有権が付いているので、権限がないアカウントはファイルの内容を見ることができません。

 

Mailbox 形式の問題点(デメリット)

Mailbox 形式には以下のデメリットがあります。

 

メールクライアント(「Thunderbird」「Microsoft Outlook」)にメールをダウンロードせずにサーバー上にため込んでしまうとファイルが肥大化してしまいます。

また、ファイルが肥大化すると POP でダウンロードする際にレスポンスが遅くなります。

 

Mailbox 形式にはロックファイルの問題もあります。

全てのメールを保存するファイルはユーザーごとに 1ファイルだけなので、読み取りや配送など複数のプログラムがファイルにアクセスすることを考えて排他制御を行なう必要があります。

例えば、MTA(Mail Transfer Agent または Message Transfer Agent)からメールを受信した MDA(Mail Delivery Agent)がファイルに書き込んでいる時にはロックが掛かり、MUA(Mail User Agent)によるメールの削除はできないようになっています。

しかし、複数のプログラムで 1つのファイルを奪い合った場合、排他制御の欠陥(デッドロック、Dead Lock)が発生する可能性があります。

デッドロックとは DB など複数のプロセスがデータを更新したりするシステムに発生する現象ですが、お互いのプロセスがお互いの処理終了を待ち続け、結果的にシステムが停止してしまうことがあります。

また、複数プロセスのアクセス時に、ファイルが破損する危険性もあります。

更に共有スプールとなるディレクトリ「/var/spool」の属性を「775」や「777」に設定する必要があるためセキュリティ上の問題が出てくる可能性があります。

[root@SAKURA_VPS spool]# pwd
/var/spool

[root@SAKURA_VPS spool]# ls -lh | grep mail
drwxrwxr-x.   2 root  mail  4.0K    12月 11 2017    mail
[root@SAKURA_VPS spool]#

 

 

Maildir の場合

Maildir 形式の場合はメールはデフォルトでユーザーのホールディレクトリに振り分けられます。

Maildir 形式の場合は、「1通のメール = 1ファイル」となり、「cur」「new」「tmp」という 3つのディレクトリが作成されます。

 

 

① MTA が受け取ったメールは tmp ディレクトリに書き込まれます。

② 書き込みが完了すると new ディレクトリに移動します。

③ MUA(メールクライアントなど)でメールを読み込むと cur ディレクトリに移動されます。

 

 

 

 

Maildir 形式のメリット

Maildir 形式は、Mailbox 形式より小さなファイルとなり(1メール、1ファイル)デッドロックの問題も発生しにくくなります。

また処理速度も高速になるのでメールシステムのパフォーマンスを求める場合や、メール量が大きくなる場合は Maildir 形式がお勧めです。

ほとんどの POP サーバー、IMAP サーバーは Maildir 形式に対応しています。

また、Mailbox 形式を Maildir 形式に変換するツールもあります。

 

 

Maildir 形式の cur ディレクトリにある既読のファイルを定期的に削除する

メールクライアントによっては、cur ディレクトリにファイルが溜まり続け、サーバーのディスク容量を圧迫することがあります。

cur ディレクトリにあるファイルは既読状態なので削除しても問題ありません。

そのため、自動的に cur ディレクトリ配下のファイルが削除されない場合は、別途定期的にファイルを削除する必要があります。

 

今回は、find コマンドで14日(2週間)以前のファイルを削除することとしました。

findコマンドの使い方は以下の記事を参考にします。

 

【Linux】find コマンド【図解】

 

毎日0時(24時)に直近14日のメールだけを残して、後は削除する cron です。

[test@SAKURA_VPS ~]$ crontab -l
# 定期的に /home/test/Maildir/cur のメールを削除する
00 00 * * * /bin/find /home/test/Maildir/cur -mtime +13 -delete
[test@SAKURA_VPS ~]$

 

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人