IMAP4 コマンド - 概要

4D - Documentation   Fran溝is   English   German   日本語   4D Internet Commandsテーマリスト   4D Internet Commandsインデックス   Back   Previous   Next

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コマンド使用時、よく利用される引数、特にメールボックスメカニズムのmsgNumuniqueIDについて理解することが重要です。

msgNumは、IMAP_SetCurrentMB コマンドが実行された時のメールボックス中のメッセージ番号です。

カレントメールボックスを選択すると、メールボックス中のメッセージには1からメッセージ数までの番号がふられます。メッセージには受信された順番に番号がふられ、1がもっとも古いメッセージとなります。メッセージふられた番号は、カレントのメールボックスを選択してから (IMAP_SetCurrentMB) それを閉じるまで (IMAP_CloseCurrentMB, IMAP_SetCurrentMB または IMAP_Logout) のみ有効です。

メールボックスが閉じられると、削除のマークが付けられたメッセージは削除されます。

ユーザがIMAPサーバに再ログインすると、メールボックス中のメッセージは再度1から番号付けされます。例えばメールボックスに10のメッセージがあり、1から5までが削除されると、再度メールボックスを開いた際には以前の6から10のメッセージに1から5の番号が付けられます。

例えば以下の例を見てみましょう: IMAPサーバにログインして以下のメッセージリストを取得したとします:

msgNumuniqueID日付送信者件名
1100051 Jul 2001 ...danw@acme.comSales lead...
2100081 Jul 2001 ...frank@acme.comSite-License order
3100123 Jul 2001 ...joe@acme.comLunch anyone?
4200004 Jul 2002 ...kelly@acme.comYour wife called...
5200014 Jul 2002 ...track@fedex.comFedEx tracking

このセッションの間、メッセージ番号3と4が削除されます。カレントのメールボックスを閉じると、実際に削除が実行されます。サーバに再度ログインすると、メッセージリストは以下のようになります:

msgNumuniqueID日付送信者件名
1100051 Jul 2001 ...danw@acme.comSales lead...
2100081 Jul 2001 ...frank@acme.comSite-License order
3200014 Jul 2002 ...track@fedex.comFedEx 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コマンドに渡すことができ、またその逆も可能です。詳細は 低レベルルーチン - 概要 セクションを参照してください。


4D - Documentation   Fran溝is   English   German   日本語   4D Internet Commandsテーマリスト   4D Internet Commandsインデックス   Back   Previous   Next