});前回までで、IMAP4機能の概要を説明した。今回は、基本的なコマンド別の機能の動作などについて解説しよう。別表1にコマンド一覧もまとめたので、参考にしてほしい(こちらをクリックすると、別ウィンドウでコマンド一覧を開きます)。状態操作CAPABILITYサーバの機能一覧を表示する。拡張コマンドやAUTHENTICATEの認証方法への対応を確認するのに使用される。パスワード最も一般的なログインのためのコマンド。引数にユーザー名とパスワードを指定する。認証方法LOGINコマンドに代わり、よりセキュアな方法で認証するためのコマンドである。SMTPの回で説明したSASLに沿った認証方法を用いる。CAPABILITYコマンドやログイン直後のレスポンスにおいて、「AUTH=認証方法」という表示で、対応している認証方法をサーバが提示するので、その中からクライアントは自身が使用できる認証方法を選択し、ログインを行う。認証方法には、CRAM-MD5、Kerberosなどがある。詳しくはSMTPの回を参照してほしい。AUTHENTICATEコマンドの使用例LOGOUTIMAP4サーバからログアウトする。ワイルドカード存在するメールボックスの一覧を表示する。「参照位置」とは階層の位置のことであり、""(値なし)が最上位を示している。再帰的にすべての階層の表示を行う。マッチするための文字列を指定してもよい。LISTコマンドの使用例LISTコマンドによって、以下のようなタグなし行による結果が返答される。メールボックス名このうち「属性」は、以下のような種類によってメールボックスの属性を示す。IMAP4の仕様でたびたび現れる「リスト」と呼ばれる表示形式だ。かっこ内の要素をスペースで区切って、複数の要素を表現している。「階層区切り文字」は、階層メールボックスを表現する場合に、階層区切りを示す文字の指定だ。このメールボックスやフォルダ以下では、ここで指定された文字が階層の区切りに使われる。(スラッシュ)なのだが、OSの違いや、前編でも述べたネットニュースの場合には、例えば「comp.mail.imap4」などのように、別の区切り文字を使いたい場合もある。このように、OSやシステムから独立した利用を想定しているのである。メールボックス名メールボックスが複数ある以上、まずどのメールボックスを操作するか指定しなくてはならない。引数に示されたメールボックスを、以下に続くメール操作コマンドにおいて使用することを宣言する。SELECTコマンドの使用例レスポンスでは、次のような対象メールボックスのステータスも返答される。メールボックス中のメール数\Recentフラグが設定されているメール数。Inboxメールボックスであれば、新着メール数を意味するメールボックスで使用されるフラグの種類またレスポンスコードによって、そのほかの付随する情報も返答されているのが分かるだろう。最終行のレスポンスコードでは、このメールボックスが「読み書き可能」か「読み込み専用」かも判別できる。ワイルドカードメールボックスの購読の開始/停止を行う。SUBSCRIBE/UNSUBSCRIVE/LSUBコマンドの使用例LISTとSELECTコマンドの組み合わせだけでは、サーバ上のすべてのディレクトリが対象になってしまうかもしれない。SUBSCRIBEコマンドで購読、つまり日常使用するメールボックスのチェックを行い、LSUBコマンドで購読しているメールボックスの一覧だけを得ることで、効率的な操作が可能になる。購読情報はサーバで管理されるので、ほかのコマンドによるアクセス時にも同様の購読が示されるというメリットもある。UNSUBSCRIBEコマンドは購読の中止を行う。inboxは必ず購読していることになる。取得データ種類IMAP4の非常にユニークな特色を表しているのが、このFETCHコマンドだ。前半で、IMAP4はメールのMIME構造を理解すると述べた。以下の例を見てほしい。マルチパートの場合のBODYSTRUCTUREオプションの使用例。NILはヌル値を示しており、パラメータのような「Name=Value」の形式データは、「("Name""Value")」とリストに変換されるこれは、「取得データ種類」としてBODYSTRUCTUREオプションを指定した例だ。MIMEの回を読んだ読者であれば、大体の意味は分かってもらえるのではないか。かこい、構造化して示す。した機能は、クライアントでMIME解析をしなくてもよいようにとの配慮である。オプションで、マルチパートの場合に必要なパートのボディのみを取得することができる。構造を調べたのち、必要な部分のみを取り出せるわけだ。BODYオプションでマルチパートの特定のボディのみを取り出したところBODYSTRUCTUREオプションはMIMEの全体構造を示すが、一方のENVELOPEオプションではヘッダの構造を取得可能だ。ENVELOPEオプションの使用例。)を用いたリストで表されるこれらの例では、分かりやすいように適当に整形している。実際にはひとつなぎに表示されるので、注意してほしい。「メッセージ番号」の指定は、1つの番号だけでもよいし、「1:3」として1から3までのメールすべて、あるいは「2,5」として2と5の2通のみ取得、といった複数指定もできる。複雑な例から述べたが、もちろんPOP3のようにメール全体やヘッダだけを取り出すこともできる。フラグの状態も、FLAGオプションによって確認可能だ。別表2のオプション一覧も参考にしてほしい(こちらをクリックすると、別ウィンドウでFETCHオプションの一覧を開きます)。メール検索サーバサイドでのメールの検索機能も、IMAP4の大きな特徴だ。POP3であれば、最初にすべてのメールをダウンロードしたあとで検索が可能になるところだが、IMAP4であればサーバ上で行えるので、検索後、対象メールのみダウンロードということも可能である。キャラクタセット]検索条件SELECTコマンドでメールボックスを選択したあとに、そのメールボックス内のメールを対象に検索が行われる。結果は、メッセージ番号で示される。検索条件は別表3に示すように、実に多彩な選択ができる(こちらをクリックすると、別ウィンドウで検索条件の一覧を開きます)。フラグなどのメール属性、ヘッダ/ボディ情報各種による検索機能が用意されている。そのままくくることでAND条件を、先頭に「NOT」を付けることでNOT条件を、「OR」を付けることで後続の複数条件をOR条件として指定できる。キャラクタセットは、検索条件の文字列のキャラクタセット(言語)を指定する。ISO-2022-JP」と指定する必要がある。前編でも説明した、各メールのメッセージフラグの設定を行うのがSTOREコマンドだ。フラグは、メールが削除予定やドラフトであることをマーキングする目的で使用される。STOREコマンドでメッセージフラグを設定したところ例のように、指定したメッセージ番号(複数指定もできる)のメールに、指定したフラグの設定や追加、削除が行える。くくり、設定するフラグを複数記述できる。フラグ状態は、以下のいずれかを指定する。メール内容APPENDコマンドは、任意のメールボックスに、任意のメールメッセージを格納する。これはPOP3にはない大きな特徴だ。メーラで作成したメールメッセージをドラフトメールボックスに格納したり、送信したメールを送信済メールボックスに保管する、などの際に使用される。APPENDコマンドでメールボックスにメッセージを格納しているところ例では、後述する「リテラル」が現れているので分かりにくいかもしれないが、メールメッセージをそのまま送っていることは分かるだろう。オプションで、設定するフラグや作成日時(エンベロープの作成日時)を指定することもできる。EXPUNGEIMAP4でのメール削除は、論理削除方式を取る。論理削除に使用されるのは、\Deletedフラグだ。この\Deletedフラグの設定されたメールは、クライアント側で「削除予定メール」として取り扱われなければならない。この削除予定を、\Deletedフラグを除去して解除することもできる。完全に物理的に削除するには、EXPUNGEコマンドを使用する。このコマンドはメールボックス中の、\Deletedフラグの設定されたメールをすべて物理的に削除する。このあとは元に戻せない。メッセージ番号はEXPUNGE後、ただちに振り直されるので、注意が必要だ。IMAP4のその他の機能おもに拡張仕様によって、IMAP4にはいくつか機能が追加されてきている。IDLEコマンドIDLE機能は、名前通り、セッションのアイドル状態を維持するための機能だ。クライアントからのIDLEコマンドにより、サーバはセッションを保持しつつ、アイドル状態に移行する。新着メールがあるなど変化があったときには、このセッションを通じてメッセージを送る。言うなれば、IMAP4における「プッシュ」技術である。IMAP4では一般的な考え方で、ユーザーが使えるサーバのエリアには、個人のメールボックスが保管されている「個人空間」、ほかのユーザーと共有する「共有空間」、またはFTPが提供するFTPの空間などがあり、それぞれ空間の名前で使い分けられるようにしようというものだ。個人空間はデフォルトなので特に名前はないが、「#Shared」「#FTP」「#News」などのように、階層メールボックスの最上位に位置できるように想定している。した名称を用いることで、共有空間やFTP、ネットニュース機能を名前で使い分けることができる。NAMESPACEコマンドは、使用できる名前空間の一覧を表示する。NAMESPACEコマンドの使用例そのほか、ユーザー間のセキュリティを提供する「アクセスコントロール」(RFC2086)、使用容量制限を行う「QUOTA」(RFC2087)などの機能が追加されている。これらの機能はあくまでオプションであり、対応していないサーバもある。実際に使用できるかどうかは、CAPABILITYコマンドで確認できる。i18n)への対応において、まずメールボックス名ではUTF7を用いて命名できる。一般的にUTF7に用いられる文字がIMAP4での予約文字と衝突するため、オリジナルのUTF7に若干の修正が加えられている。このUTF7を修正Base64(パディングとして=(イコール)を使わない、/(スラッシュ)の代わりに,(カンマ)を用いるなどの修正をしている)エンコードしたうえで、&(アンパサンド)と-(マイナス)でくくることとしている。IMAP4ではHTTPなどと異なり、原則として7ビットコードのみを扱うこととしている。MIMEエンコードされたメールなどは、7ビット以外ありえないので問題ないが、それでもときとしては8ビットコードを扱わないといけない場合もある。そこで「リテラル」という8ビットへの切り替え局面を想定している。以下の例を見てほしい。日本語メールをFETCHコマンドで切り出しているところ。かっこ内の数字は、日本語のバイト数を示しているこれは、日本語メールのボディだけをFETCHコマンドで切り出している例だ。通常のFETCHならそのまま連続するところが、途中で{40}として行を変え、出力を切り替えている様子が分かるだろう。40は日本語部分(つまり8ビットコード)のサイズだ。8ビットへの切り替えを相手に指示し、指定サイズ分の受け取り準備をさせるわけだ。ここではFETCHでの例だが、APPENDでのクライアントからサーバへの送信時など、どのコマンドにおいてもリテラルは利用できる。周りを見てもあまり話を聞かない、というのがほとんどではないか。残念ながら、これまでIMAP4はPOP3ほどは浸透してこなかった。理由はいくつか考えられる。大きな理由の1つは、サーバ集中型であるがゆえに、それなりのサーバ性能が必要であること、メールをサーバに残す前提のため大量のHDD容量が必要であることが管理者に嫌われた、という背景があるようだ。後者は、HDDのコストも馬鹿にならないし、何より日常的にディスク管理やバックアップなどの手間が増える。初期には特に日本語環境での互換性も問題になった。近年のモバイルユーザーの増加により、ISPなどの例を見ても一時期に比べ、IMAP4を採用する業者が増えてきている。Webメールでも実は内部ではIMAP4を使用している例も多い。メジャーなメーラやメールサーバのほとんどがIMAP4に対応し終わった現在、メールの利用形態の移り変わりとともに、IMAP4はメールのメインストームとしての地位を徐々に確立しつつある。次回は、いよいよ連載最後のテーマだ。古参のインターネットプロトコルであるFTPを取り上げる。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。