version 2003 (Modified)
IMAPコマンドを使用して、IMAPメールサーバと通信し、メッセージを処理することができます。IMAPコマンドはRFC2060で示されたInternet Message Access Protocol, Version 4 revision 1 (IMAP4rev1) と互換があります。IMAP4rev1は、メールボックスと呼ばれる、リモートのメッセージフォルダを、ローカルのメールボックスと同様に管理できるようにします。
IMAPコマンドを使用して、メールボックスの作成、削除名称変更などの操作、新着メッセージのチェック、メッセージの削除、メッセージフラグの設定やクリア、メッセージの検索、選択したメッセージの受信などができます。
用語
“接続”はネットワークの接続開始 (IMAP_Login) から接続終了 (IMAP_Logout) まで、IMAPクライアント/サーバの一連のシーケンスを指します。
“セッション”はメールボックスが選択 (IMAP_SetCurrentMB) されてから、選択終了 (IMAP_SetCurrentMB, IMAP_CloseCurrentMB) または接続の終了 (IMAP_Logout) まで、クライアント/サーバの一連のシーケンスを指します。
IMAP接続概要
・TCP接続の初期化: IT_MacTCPInit (PPP接続の場合、IT_PPPConnectコマンドをIT_MacTCPInitよりも前に呼び出さなければなりません)。
・接続を開く: IMAP_Login
・メールボックスの管理: リスト, 作成, 削除, 名称変更, 購読/購読解除, ステータスの取得など。
・メールボックスを指定してセッションを開く: IMAP_SetCurrentMB.
カレントのメールボックスを設定した後、メッセージを管理できます。
・メッセージの管理: リスト, メッセージのダウンロードや削除、メッセージフラグのリストや更新、他のメールボックスへのコピー、(ダウンロードをしない) メッセージの検索や受信など。
・カレントのメールボックスメッセージの操作が終了したら、セッションを閉じるか、他のメールボックスをカレントのメールボックスにできます。いずれの場合も、IMAPサーバは恒久的にメッセージを更新します。例えば、削除フラグが設定されたメッセージを削除します。
・すべての操作が終了したらログアウトします。接続を閉じる: IMAP_Logout.
・他の操作: 環境設定、接続のチェック、IMAPサーバ上の自動切断タイマーのリセット
IMAP コマンドテーマ
IMAP関連のコマンドは二つのセクション"IC IMAP メール閲覧"と"IC ダウンロード済みメール"に分けられます。この分離はメールを読み込む異なる方法を表しています。IMAPサーバからメールを読みだす際、メッセージ (またはメッセージに関する情報) は (変数, フィールド, 配列など) 4Dのオブジェクトに格納されるか、ディスクにダウンロードされます。このセクションでは、4D Internet Commandsを使用してIMAPサーバからメッセージを読み込む能力について説明します。
メッセージの受信に二つの方法が用意されている理由は、大きな情報をダウンロードするかもしれない場合のメモリの制限のためです。例えば、5MBの添付ファイルがあるメッセージは、容易にデータベースの格納容量をオーバーフローさせます。4Dオブジェクトでこのサイズを格納できるのはピクチャやBlobです。しかしメッセージや添付ファイルをこれらのオブジェクトに変換するのは、大きなメモリ空間が必要なため、効率的ではありません。これを解決するために、このセクションにはIMAP_Downloadコマンドが用意され、IMAPサーバからメッセージをローカルディスクにダウンロードできるようになっています。
ディスクに保存された後は、"IC ダウンロード済みメール"セクションのコマンドを使用して、ファイルを操作できます。
メールボックスメカニズム
IMAPのメールボックスはフォルダのように操作でき、フォルダがファイルやサブフォルダを含むことができるように、メールボックスもメッセージやサブメールボックスを含むことができます。
メールボックスには完全な階層名を使用してアクセスできます。それぞれの階層レベルは、IMAP_ListMBs コマンドで返される階層セパレータで分けられます。
セパレータを使用して、子メールボックスを作成したり、名前階層の上位レベルまたは下位レベルを検索したりできます。階層のトップレベルのすべての子階層は、同じセパレータ文字を使用します。
Note: メッセージはカレントのメールボックスを選択 (IMAP_SetCurrentMB) した後にのみ操作できます。
アカウントごとに一つまたは複数のメールボックスを持つことができます。
メールボックスは大文字小文字を区別しますが、大文字と小文字の違いしかない複数のメールボックスを作成することはできません。
INBOXメールボックスは特別なケースです。このメールボックスはすべてのアカウントに存在し、受信したメッセージを格納するために使用されます。アカウントがセットアップされると、INBOXは自動で作成されます。
ユーザはINBOXメールボックスを削除できませんが、名称変更は可能です。新しい空のINBOXがすぐに作成されます。INBOXは大文字小文字を区別しません。
メッセージ総数や新規メッセージ数などのいくつかのメールボックス属性は、メールボックスがカレントでなくてもチェックできます。
msgNumとuniqueID
IMAPコマンド使用時、よく利用される引数、特にメールボックスメカニズムのmsgNumとuniqueIDについて理解することが重要です。
msgNumは、IMAP_SetCurrentMB コマンドが実行された時のメールボックス中のメッセージ番号です。
カレントメールボックスを選択すると、メールボックス中のメッセージには1からメッセージ数までの番号がふられます。メッセージには受信された順番に番号がふられ、1がもっとも古いメッセージとなります。メッセージふられた番号は、カレントのメールボックスを選択してから (IMAP_SetCurrentMB) それを閉じるまで (IMAP_CloseCurrentMB, IMAP_SetCurrentMB または IMAP_Logout) のみ有効です。
メールボックスが閉じられると、削除のマークが付けられたメッセージは削除されます。
ユーザがIMAPサーバに再ログインすると、メールボックス中のメッセージは再度1から番号付けされます。例えばメールボックスに10のメッセージがあり、1から5までが削除されると、再度メールボックスを開いた際には以前の6から10のメッセージに1から5の番号が付けられます。
例えば以下の例を見てみましょう: IMAPサーバにログインして以下のメッセージリストを取得したとします:
msgNum | uniqueID | 日付 | 送信者 | 件名 |
1 | 10005 | 1 Jul 2001 ... | danw@acme.com | Sales lead... |
2 | 10008 | 1 Jul 2001 ... | frank@acme.com | Site-License order |
3 | 10012 | 3 Jul 2001 ... | joe@acme.com | Lunch anyone? |
4 | 20000 | 4 Jul 2002 ... | kelly@acme.com | Your wife called... |
5 | 20001 | 4 Jul 2002 ... | track@fedex.com | FedEx tracking |
このセッションの間、メッセージ番号3と4が削除されます。カレントのメールボックスを閉じると、実際に削除が実行されます。サーバに再度ログインすると、メッセージリストは以下のようになります:
msgNum | uniqueID | 日付 | 送信者 | 件名 |
1 | 10005 | 1 Jul 2001 ... | danw@acme.com | Sales lead... |
2 | 10008 | 1 Jul 2001 ... | frank@acme.com | Site-License order |
3 | 20001 | 4 Jul 2002 ... | track@fedex.com | FedEx tracking |
msgNum はスタティックな値ではなく、セッションごとに異なる可能性があります。メッセージ番号は、メールボックスが選択された時のメッセージの状態で変化します。
ところで、uniqueIDはユニークな値で、IMAPサーバが昇順にメッセージに付加します。メールボックスにメッセージが追加されると、以前に追加されたメッセージより上の値が割り当てられます。
前年なことに、IMAPサーバはメッセージの主たる参照としてuniqueIDを使用しません。IMAPコマンドを使用する際は、メッセージを参照するためにmsgNumを使用する必要があります。データベースにメッセージ参照を格納し、メッセージそのものはサーバに残すようなソリューションを構築する際、開発者はこの点に留意する必要があります。
推奨
IMAP全体として相互的なものであり、独立してテストすることはできないため、"すべてをテストする"ことをお勧めします。アカウントを取得可能なすべてのサーバに対してテストを行うようにしてください。
詳細は以下のサイトをチェックしてください:
・IMAP Products and Services: http://www.imap.org/products.html
・MailConnect: http://www.imc.org/imc-mailconnect.
POP3とIMAP4コマンドの比較
Login | 同等 | IMAPにaPOP引数はありません |
VerifyID | 同等 | |
Delete | 同等 | IMAPはリアルタイムで削除を行います。 |
POP3はPOP3_Logoutを待って恒久削除を行います。 | ||
IMAP_SetFlagsで\Deletedフラグを使用すれば、 | ||
POP3_Deleteコマンドと同じ結果になります。 | ||
Logout | 同等 | |
SetPrefs | 同等 | IMAPにattachFolderはありません。 |
POP3のattachFolderはオプションです。 | ||
GetPrefs | 同等 | SetPrefsのattachFolderに関するメモを参照 |
MsgLstInfo | 同等 | |
MsgInfo | 同等 | |
MsgLst | 同等 | |
UIDToMsgNum | 同等 | IMAPのmsgUIDは倍長整数ですが、POP3のmsgUID |
は文字列です。 | ||
Download | 同等 | |
POP3_Reset | 代替 | IMAP_Searchで\Deletedの検索を行い |
IMAP_SetFlagsで\Deletedフラグを削除します。 | ||
POP3_BoxInfo | 代替 | IMAP_SetCurrentMBとIMAP_MsgLstInfo |
IMAP_ MsgNumToUID | 代替 | |
GetMessage | 殆ど同等 | IMAPはよりパワフルで、"ボディのみ"を選択可能 |
POP3_Charset | 同等無 | IMAPは自動で文字セットを管理 |
IMAP_Capability | 同等無 | IMAPプロトコルのみ |
IMAP_ListMBs | 同等無 | IMAPプロトコルのみ |
IMAP_GetMBStatus | 同等無 | IMAPプロトコルのみ |
IMAP_SetCurrentMB | 同等無 | IMAPプロトコルのみ |
IMAP_GetCurrentMB | 同等無 | IMAPプロトコルのみ |
IMAP_CloseCurrentMB | 同等無 | IMAPプロトコルのみ |
IMAP_CopyToMB | 同等無 | IMAPプロトコルのみ |
IMAP_SubscribeMB | 同等無 | IMAPプロトコルのみ |
IMAP_CreateMB | 同等無 | IMAPプロトコルのみ |
IMAP_DeleteMB | 同等無 | IMAPプロトコルのみ |
IMAP_RenameMB | 同等無 | IMAPプロトコルのみ |
IMAP_SetFlags | 同等無 | IMAPプロトコルのみ |
IMAP_GetFlags | 同等無 | IMAPプロトコルのみ |
IMAP_Search | 同等無 | IMAPプロトコルのみ |
IMAP_MsgFetch | 同等無 | IMAPプロトコルのみ |
Notes:
・IMAPとPOP3サーバ: IMAPサーバの場合、msgIDは倍長整数であることに注意してください。
・POP3とIMAPプロトコルでは、削除の方法が異なります。IMAP_Deleteはリアルタイムでメッセージを取り除きます。POP3_Deleteと同じ結果を得るには、IMAP_SetFlagsを使用して\Deletedフラグを設定してください。POP3_Resetと同じ結果を得るには、IMAP_SetFlagsを使用して\Deletedを削除します。
・4D Internet commandsではPOP3, IMAP, FTP接続参照を直接低レベルTCPコマンドに渡すことができ、またその逆も可能です。詳細は 低レベルルーチン - 概要 セクションを参照してください。