現在、フリーのIMAPサーバの実装としては、
あたりが有名なところです。 この文書では、この上記の実装を比較・検討します。 IMAPサーバの選択の助けになれば幸いです。
まず、ポイントとして、従来から使われている形式を使うか、Cyrusのように独自形式を使うか、ということを考慮する必要があります。 mbox や Maildir のような従来形式を使う理由としては、
などが考えられます。
しかし、Maildir対応のように、形式的には従来形式ですが、 特殊な使用方法をしている場合もありますので、 IMAPサーバと使用するツールのドキュメントを読んで、 問題がないかどうか確認する方が良いでしょう。 また、IMAP以外で勝手に操作したためのキャッシュの不整合が発生する可能性も考慮しましょう。
次に、大きく分けて形式が、mboxのような1フォルダー=1ファイル形式と、 Maildirのような 1メッセージ=1ファイル形式があります。 一般的に言って、1フォルダー=1ファイル形式ですと、 フォルダーが大きくなったときにメッセージの操作が非常に遅くなる可能性がありますので、 メッセージを大量に操作する場合には注意する必要があります。 ランダムアクセスについては、 別途インデックスファイルを用意するなどしてパフォーマンスを向上させている場合もありますが、 削除などの場合にはファイルをまるごとコピーする必要から、 速度が期待できない場合もあります。 また、1メッセージ=1ファイル形式ですと、 今度は大量のメッセージがあると、一覧表示などが、非常に遅くなる可能性があります。 この問題は、使用するファイルシステムとして、 ディレクトリのスキャンが早いもの (Linux の ReiserFS や FreeBSDでの DIRHASHオプションなど) を選択すれば緩和される可能性があります。
IMAP4rev1 ではサーバ側でメッセージの検索を行うことができます。 クライアントからヘッダや本文などの位置の指定と、 検索キーワードをサーバに渡して検索を依頼します。 この時、キーワードにはその文字列のCHARSET (iso-2022-jpなど)も指定可能です。
今回取り上げた実装は全て、 検索キーワードもメッセージ自体も両方ともUTF-8に変換した後、比較を行っています (このあたりの振舞いは IMAP4rev1 では規定されていないため、 他のサーバ実装では異なる場合もあり得ます)。
つまり、サーバに保存されているメッセージの CHARSET と、 クライアントが検索時に指定する CHARSET の両方をサーバがサポートしていないと、 検索が失敗してしまいます。
多くの場合、検索対象は 欧文(us-ascii, iso-8859-*) と 日本語 (iso-2022-jp) で、クライアント側は iso-2022-jp を指定して検索するようですので、 これらがサーバでサポートされていれば、検索は成功することになります。 しかし、その他の要件がある場合には、注意する必要があります。
サーバとクライアントの問題として、名前空間(NAMESPACE)の違いがあります。
IMAPではサーバ上にフォルダーが置けるわけですが、 名前空間とは、このフォルダーの配置方法のことです。 例えば、個人のフォルダーはどこに置けて、共有フォルダーはどこに置かれて、 階層区切りの記号は何が使えるか、といったことです。
このあたりの名前空間の規定は IMAP4rev1にはなく、 サーバによって様々です。 これではクライアントがどう振舞えばいいのかわからなくなります (例えば、ゴミ箱(Trash)フォルダーをどこに作ればいいのか?)。
これを解決するために、
という方法が多くの場合とられています。
しかし、クライアントによっては、 名前空間が決め打ちだったり、 特殊な名前空間に対応できなかったりという場合があるので、 そのようなクライアントを使用しなければならない場合、 クライアントが想定している名前空間を使える実装を選択する必要があるかも知れません。 そのような場合の多くは、初期から使用されることの多かった、UWの INBOXと同じ階層に個人のフォルダーを置く名前空間を想定している場合が多いようです。
因みに、受信箱(Inbox)の下に個人用のメールボックスを置く実装を使った場合、 クライアント側の表示が心理的に気持ち悪いという意見を聞くこともありますが、 これはサーバの問題というよりも、クライアントの問題です。 クライアントは何もサーバが返す階層構造のまま表示する必要はなく、 個人用のメールボックスを Inbox と同レベルで表示しても構わず、 実際、そのような実装はあります。
POP3にAPOPという、平文パスワードがネットワークを流れない機能がありますが、 同様な認証方法が SASLという枠組の中で IMAP でも用意されています。
SASLには様々な認証方法がありますが、 全てをサーバもクライアントもサポートしているわけではないので、 使用するクライアントがサポートする認証方法をサーバがサポートしているかどうかを確認しておく必要があります。 多くの実装が CRAM-MD5をサポートしていますが、そうでない場合もあります。
(2007/5/1現在)
尚、別パッケージ、パッチなどで機能追加されるものもありますが、 ここでは標準パッケージでの機能を紹介しておきます。
| 機能/サーバ | UW (2006g) | Cyrus (2.3.8) | Courier (4.1.3) | Dovecot (1.0.0) |
|---|---|---|---|---|
| 保存形式 | mbox, mmdf, mbx, mtx, mix, tenex, phile, mx, mh, news | 独自形式 (1メッセージ = 1ファイル) | Maildir | mbox, Maildir |
| PAM対応 | ○ | ○ | ○ | ○ |
| LDAP認証 | − | ○ | ○ | ○ |
| vpopmail | × | × | × | ○ |
| DB認証 | − | MySQL, PostgreSQL | MySQL, PostgreSQL | MySQL, PostgreSQL |
| IPv6 | (使用するスーパーデーモンに依存) | ○ | ○ | ○ |
| CHARSET | US-ASCII, UTF-8, UTF-7, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8 ISO-8859-9 ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, KOI8-R, KOI8U, KOI8-RU, TIS-620, VISCII, GB2312, CN-GB, ISO-2022-CN, CN-GB-12345, BIG5, CN-BIG5, BIG-5, ISO-2022-JP, EUC-JP, SHIFT_JIS, SHIFT-JIS, ISO-2022-JP-1, ISO-2022-JP-2, ISO-2022-KR, EUC-KR, KSC_5601, KS_C_5601-1987, KS_C_5601-1989, KS_C_5601-1992, KS_C_5601-1997, WINDOWS-874, WINDOWS-949, CP949, X-WINDOWS-949, WINDOWS-1250, WINDOWS-1251, WINDOWS-1253, WINDOWS-1254,WINDOWS-1255, WINDOWS-1256, WINDOWS-1257, WINDOWS-1258, IBM367, IBM437, IBM737, IBM775, IBM850, IBM852, IBM855, IBM857, IBM860, IBM861, IBM862, IBM863, IBM864, IBM865, IBM866, IBM869, IBM874, ANSI_X3.4-1968 | us-ascii, iso-8859-1, iso-8859-2, iso-8859-3, iso-8859-4, iso-8859-5, iso-8859-6, iso-8859-7, iso-8859-8, iso-8859-9, koi8-r, iso-2022-jp, iso-2022-kr, gb2312, big5, iso-8859-15, windows-1252, windows-1256 | ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10, ISO-8859-13, ISO-8859-14, ISO-8859-14, ISO-8859-15, TIS-620, WINDOWS-874, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252, WINDOWS-1253, WINDOWS-1254, WINDOWS-1255, WINDOWS-1256, WINDOWS-1257, WINDOWS-1258, IBM437, CP437, IBM775, CP775, IBM850, CP850, IBM852, CP852, IBM855, CP855, IBM857, CP857, IBM860, CP860, IBM861, CP861, IBM862, CP862, IBM863, CP863, IBM864, CP864, IBM865, CP865, IBM866, CP866, IBM869, CP869, US-ASCII, UTF-8, UTF-7, KOI8-R, BIG5, BIG5-HKSCS, GB2312, EUC-CN, ISO-2022-JP, SHIFT_JIS, EUC-JP, ISO-2022-JP-1, ISO-2022-KR, EUC-KR, CP949, KS_C_5601-1987 | us-ascii, ascii, utf-8, utf8, (他使用するiconvライブラリがサポートするもの) |
| 共有メールボックス | ○ | ○ | ○ | ○ |
| 個人名前空間 | INBOXと同一階層 | INBOX以下と同一階層をシステムレベルで選択可能 | INBOX以下 | PREFIXをシステムレベルで自由に指定可能 |
| IMAP専用ユーザーが作成可能 | × | ○ | ○ | ○ |
| IMAP4rev1 (rfc3501) | ○ | ○ | ○ | ○ |
| QUOTA (rfc2087) | × | ○ | ○ | ○ |
| LITERAL+ (rfc2088) | ○ | ○ | × | ○ |
| IDLE (rfc2177) | ○ | ○ | ○ | ○ |
| MAILBOX-REFERRALS (rfc2193) | ○ | ○ | × | × |
| LOGIN-REFERRALS (rfc2221) | ○ | × | × | ○ |
| NAMESPACE (rfc2342) | ○ | ○ | ○ | ○ |
| STARTTLS (rfc2595) | ○ | ○ | ○ | ○ |
| ID (rfc2971) | × | ○ | × | × |
| CHILDREN (rfc3348) | × | ○ | ○ | ○ |
| MULTIAPPEND (rfc3502) | ○ | ○ | × | ○ |
| BINARY (rfc3516) | ○ | ○ | × | × |
| MUPDATE (rfc3656) | × | ○ | × | × |
| UNSELECT (rfc3691) | ○ | ○ | × | ○ |
| ACL (rfc4314) | × | ○ | ○ | ○ |
| UIDPLUS (rfc4315) | ○ | ○ | ○ | × |
| URLAUTH (rfc4467) | × | ○ | × | × |
| CATENATE (rfc4469) | × | ○ | × | × |
| Lemonade (rfc4550) | × | ○ | × | × |
| CONDSTORE (rfc4551) | × | ○ | × | × |
| ANNOTATE (draft) | × | × | × | × |
| LIST-EXTENDED (draft) | × | ○ | × | × |
| SORT and THREAD(draft) | SORT, THREAD=ORDEREDSUBJECT, THREAD=REFERENCES | SORT, THREAD=ORDEREDSUBJECT, THREAD=REFERENCES | SORT, THREAD=ORDEREDSUBJECT, THREAD=REFERENCES | SORT, THREAD=REFERENCES |
| ANNOTATEMORE (draft) | × | ○ | × | × |
| SCAN (no draft) | ○ | × | × | × |
| SASL-IR (draft) | ○ | ○ | × | ○ |
| SASL認証機構 | GSSAPI, CRAM-MD5, PLAIN, LOGIN, ANONYMOUS | GSSAPI, KERBEROS_V4, CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, OTP, SRP, ANOYMOUS, NTLM | CRAM-MD5, CRAM-SHA1, CRAM-SHA256, LOGIN, PLAIN | PLAIN, CRAM-MD5, DIGEST-MD5, NTLM, GSSAPI, RPA, LOGIN, ANONYMOUS, OTP, SKEY |
| Sieve (rfc3028) | × | ○ | × | × |
とにかくサポートする保存形式が多彩なため、 現在使用しているメールサーバを簡単にIMAP4に対応させるには良い選択です。 ただし、Maildirには正式には対応していませんし、 作者も対応する予定はありません。
しかしながら、普通、その場合に使われてる mbox やmh 形式では、 大規模なサーバには耐えられないため、 メール保存形式の変更などのチューニングを行う必要がありますので、 その場合には容易さの利点が無くなってしまいます。
IMAP4専用に設計されているため、IMAP4的機能の豊富さと、 パフォーマンスの良さが利点です。 数万ユーザを超える大規模な環境での動作実績があります。
しかしながら、完全に独自形式のため、 メールサーバの移行には多少の苦労が必要です。
Maildirに対応していることと、 機能をモジュール的に切り離せるため、 サーバを軽くすることができることが利点といえるでしょう。
また、Courier-MTA という、 MTAなどを含むパッケージの IMAP 部分ともとらえることができます。 そう考えると、他の実装のように、 外部のMTAとの組み合わせるときの設定で悩むことが少ないかもしれません。
長らく待たされましたが、ようやく1.0がリリースされました。 後発だけあって、他との互換性が考えられているところや、 比較的軽いという理由で、 小規模環境で導入されることが増えているようです。
To Be Continued...