(Translated by https://www.hiragana.jp/)
Maildir - Wikipedia コンテンツにスキップ

Maildir

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

Maildirは、ひろ使つかわれている電子でんしメール格納かくのうフォーマットの一種いっしゅで、メッセージを追加ついか移動いどう削除さくじょするさいにメッセージの完全かんぜんせい保証ほしょうするためにアプリケーションレベルでファイルロックする必要ひつようがない。個々ここのメッセージは個別こべつファイルとして一意いちい名前なまえきで保持ほじされている。すべての操作そうさファイルシステムの不可分ふかぶん操作そうさ使つかうので、ファイルシステムがわ並行へいこうせい制御せいぎょのためのファイルロックおこなう。Maildirはディレクトリであり(通常つうじょう、その名前なまえMaildir)、サブディレクトリとして tmpnewcur がある。

仕様しよう

[編集へんしゅう]

Maildirは単純たんじゅんさと保守ほしゅ容易たやすさがすぐれており、多数たすうのユーザーをあつか場合ばあいにも機能きのうせいすぐれている。

qmaildjbdns、その各種かくしゅソフトウェアを開発かいはつしたダニエル・バーンスタインがMaildirのオリジナルにして唯一ゆいいつ仕様しよういた[1]。そのバーンスタインに追随ついずいするうごきがなく、Maildirを標準ひょうじゅんしようという努力どりょくもなされていない。この仕様しようはバーンスタインのqmailけにかれたもので、おおくのプログラムに実装じっそうするのに十分じゅうぶん汎用はんようせいそなえていた。ときとも様々さまざま実装じっそうがなされ、数少かずすくない欠点けってん発見はっけんされている[よう出典しゅってん]

Courier Mail Server などのソフトウェアを開発かいはつした Sam Varshavchik が、サブフォルダとメールクオータをサポートすべくMaildirの拡張かくちょうフォーマット Maildir++つくった[2]。Maildir++ ディレクトリぐんには、'.'(ドット)ではじまる名前なまえのサブディレクトリがあり、それらもMaildir++のフォルダである。したがってこの拡張かくちょうはMaildir仕様しようとはことなるが、MaildirソフトウェアはMaildir++もサポートするものがおおい。

Maildirがかかわる領域りょういき

[編集へんしゅう]

電子でんしメールは以下いかのような状況じょうきょう格納かくのうされる必要ひつようがある。

  • SMTP MTA において、遠隔えんかく電子でんしメールサーバから受信じゅしんべつ場所ばしょ配送はいそうされるのをあいだ。MTAが使つか格納かくのう領域りょういきスプールぶことがおおい。
  • IMAPのメールストアにおいて、電子でんしメールクライアント (MUA) に電子でんしメールを提供ていきょうするまでのあいだ
  • MUAを使つかってユーザーがローカルに電子でんしメールを場合ばあい直接ちょくせつ通信つうしんプロトコルを使つかって受信じゅしんしたものを表示ひょうじしているのではなく、一旦いったんストレージじょう電子でんしメールを格納かくのうして、それをっている。
  • スパムのフィルタリングなど、電子でんしメールを媒体ばいたい一旦いったん格納かくのうする場合ばあい

RFC 822関連かんれんする標準ひょうじゅん電子でんしメールメッセージをふくすうぎょうのテキストであると定義ていぎしており、そのテキストの先頭せんとうすうぎょう厳密げんみつ規則きそくしたがっている。このかんがかたはファイルとよく一致いっちする。Maildirは個々ここのメッセージに1つのファイルを対応たいおうさせる設計せっけいであり、SMTPなどのプロトコルを使つかってネットワークじょう転送てんそうされる電子でんしメールと正確せいかく対応たいおうしている。MTAも電子でんしメールをシーケンシャルアクセス方式ほうしきでまとめて(バッチてきに)処理しょりするのが一般いっぱんてきであり、これもメッセージとファイルの対応たいおうてきしている。

ディレクトリにそれぞれ1つのメッセージをふく多数たすうのファイルがかれているという構造こうぞうは、電子でんしメールのランダムアクセス必要ひつようとされるような状況じょうきょうでは不十分ふじゅうぶんである。このためおおくの実装じっそうでは、検索けんさく能力のうりょくすぐれたデータベース使つかっている。2007ねん現在げんざい一般いっぱんにファイルシステムはデータベースよりもアクセス性能せいのうがよいので[よう出典しゅってん]実装じっそうたってはインデックスけの方法ほうほう、プログラミングの容易たやすさ、性能せいのう効率こうりつ既存きそん技術ぎじゅつさい利用りよう信頼しんらいせいなどを勘案かんあんしている。最近さいきんのメール関連かんれんソフトウェアである Cyrus IMAP serverMH Message Handling SystemDovecot IMAP server、UW IMAP英語えいごばん server などはすべ相互そうご互換ごかんなメッセージごとにファイルを使つかうフォーマットにインデックス手法しゅほうわせている(Dovecot と UW IMAP はのソフトウェアからアクセス可能かのうなフォーマットも実装じっそうしている)。

技術ぎじゅつてき詳細しょうさい

[編集へんしゅう]

電子でんしメールメッセージを配送はいそうするプロセスは、その内容ないようtmp ディレクトリに一意いちいなファイルめいのファイルとしてむ。一意いちいなファイルめい生成せいせいする現在げんざいのアルゴリズムは、時刻じこくとホストめいといくつかの擬似ぎじ乱数らんすうパラメータを使つかって一意いちいせい保証ほしょうしている[1]

配送はいそうプロセスは、tmp/unique にファイルをつくり、メッセージをみ、それを new/unique移動いどうさせる。この移動いどう一般いっぱんnew へのハードリンクを生成せいせいし、その tmp からアンリンクするという手順てじゅんだが、実装じっそうによってはたんrename()使つかっている。電子でんしメールクライアントは tmpけっしてみることはいので、このような手順てじゅんでMaildirをんでいるプロセスが部分ぶぶんてきかれたメッセージをってしまうという事態じたいける。

電子でんしメールクライアントプロセスが new ディレクトリにメッセージをつけると、それを cur移動いどうさせる。このときは rename()使つかう。リンクしてからアンリンクするという前述ぜんじゅつ方式ほうしきをここで使つかうと、メッセージが両方りょうほう存在そんざいするという事態じたいしょうじる可能かのうせいがある。そして、中身なかみまえにファイルめい末尾まつび付加ふか情報じょうほう追加ついかする。この付加ふか情報じょうほうは、まずコロンがあり(一意いちいなファイルめい情報じょうほう部分ぶぶん区別くべつするため)、つぎに '2' とコンマが1つずつあり、各種かくしゅフラグならぶ。'2' はおおまかにえば、コンマののち情報じょうほうのバージョンを意味いみする。ただし、公式こうしきなバージョンとしては '2' しかなく、'1' は実験じっけん段階だんかい使つかわれただけである。仕様しようじょう定義ていぎされているフラグとしては、"P"、"R"、"S"、"T"、"D"、"F" がある[1]。Dovecotでは小文字こもじを26種類しゅるいのIMAPキーワードに使つか[3]、それらには$MDNSentのような標準ひょうじゅんされたキーワードやユーザー定義ていぎフラグがふくまれる。

ロックしない操作そうさによる問題もんだい

[編集へんしゅう]

ダニエル・バーンスタインは、たとえNFSじょうでも、複数ふくすうのプロセスがロックせずに同時どうじもうとしても大丈夫だいじょうぶなようにMaildirを設計せっけいした。大抵たいてい場合ばあい、これがうまく機能きのうしているが、バーンスタインはファイルシステムの実装じっそうじょう制限せいげん考慮こうりょしていなかった。ディレクトリをプロセスが場合ばあい readdir()使つかうが、これはいち全体ぜんたいむわけではなく、ディレクトリエントリごとむ。このため一連いちれんreaddir() でディレクトリをっている最中さいちゅうべつのプロセスがファイルめい変更へんこうおこなった場合ばあい、タイミングによってはそのファイルのエントリがれないことがある。これはたとえば受信じゅしんメールの一覧いちらん表示ひょうじさせたときにメッセージがえたようにえることになる(実際じっさいにはフラグを付加ふかしていただけである)。そして、もう一度いちど一覧いちらん表示ひょうじさせると、えたはずのメッセージが再度さいど出現しゅつげんする。このような問題もんだい回避かいひするため、Maildirのトップを独自どくじにロックする方式ほうしき採用さいようしているものもある。たとえば、DovecotはMaildirにたいして独自どくじのロック機構きこう使つかっている[3]

macOSHFS PlusZFSではない)では、この問題もんだいきないようにえる[よう出典しゅってん]Linux場合ばあいinotifyでMaildirの変化へんか監視かんしすることで問題もんだいふせぐことができる。たとえば、readdirをおこなったのちで、inotifyであらたなファイルが追加ついかされていないかを調しらべればよい[よう出典しゅってん]

Maildirを直接ちょくせつサポートしているソフトウェア

[編集へんしゅう]

メールサーバ

[編集へんしゅう]

配送はいそうエージェント

[編集へんしゅう]

メールリーダ

[編集へんしゅう]

メール検索けんさくツール

[編集へんしゅう]
  • Beagle - Maildirや様々さまざまなフォーマットをインデックスけする。

間接かんせつてきにMaildirをサポートするソフトウェア

[編集へんしゅう]

これらのソフトウェアの連携れんけい方式ほうしき通信つうしんプロトコルの役割やくわり考慮こうりょすると、Maildirをサポートするソフトウェアの範囲はんいはもっとひろがる。たとえば、つぎのようにかんがえることができる。

  • 誤解ごかいされていることがおおいが、Sendmail MTA は単体たんたいでは電子でんしメール配送はいそうフォーマットをサポートしていない。Sendmail には mail.local という独立どくりつしたプロセスがあって、配送はいそうおこなっている。mail.local として Procmail(やのMaildirをサポートするプログラム)を使つかうことができるので、Sendmail はのフォーマットと同様どうようにMaildirもサポートしているとえる。
  • おおくのメールリーダーはMaildirはサポートしていないが、IMAPなどのリモートアクセスフォーマットはサポートしている。IMAPメールストアにはMaildirをサポートするものがあるので、IMAPをサポートするメールリーダー(Microsoft OutlookPineMozilla Thunderbird)はそれを経由けいゆしてMaildirのフォルダにアクセスできる。
  • FetchmailはMaildir(あるいはのローカルな配送はいそうフォーマット)をサポートしていないが、SMTPサーバやローカルな配送はいそうエージェントとやりりするので、それらを経由けいゆすることで電子でんしメールをFetchmailからMaildirに配送はいそうできる。

Windowsのソフトウェア

[編集へんしゅう]

Maildir標準ひょうじゅんはファイルめいにコロンを使つかうため、Microsoft Windows うえでは修正しゅうせいなしで実装じっそうできない。Windowsじょうでコロンのわりにべつ文字もじ(";"、"-" など)を使つかえない技術ぎじゅつてき理由りゆうはないが、仕様しよう更新こうしんされていないため、代替だいたい使用しようする文字もじについて全体ぜんたいてき合意ごういがなされていないという問題もんだいがある。そのため、WindowsじょうのあるプログラムがMaildirファイルをいても、べつのプログラムがめないという問題もんだい発生はっせいする。PythonPerlかれMaildirをサポートしているプログラムがあるし、Cygwinなどを使つかってUNIXじょうのプログラムをWindowsじょううごかすこともできるが、コロンの代替だいたいをどうするかという問題もんだい解決かいけつしないと動作どうさ保証ほしょうできない。

また、Windows(とくふるいバージョン)ではファイルめい更新こうしん不可分ふかぶん操作そうさでないという問題もんだいもある[4]

関連かんれん項目こうもく

[編集へんしゅう]

脚注きゃくちゅう出典しゅってん

[編集へんしゅう]
  1. ^ a b c Daniel J. Bernstein. (1995) Using maildir format (the original specification)
  2. ^ Varshavchik, Sam (1998) Maildir++ and Maildir quotas このなかにMaildir++の仕様しようがある。
  3. ^ a b Dovecot Wiki: maildir format
  4. ^ Is an atomic file rename (with overwrite) possible on Windows? Stack Overflow にせられた質問しつもん

外部がいぶリンク

[編集へんしゅう]