IMAP_MsgFetch コマンドは、メッセージをダウンロードせずに、指定したメッセージの一つ以上の基本的なデータ項目を取得することを可能にします。
imap_ID はIMAP_Loginで作成されるIMAPログイン参照です。
msgNum はチェックするメッセージを指定するメッセージ番号です。この番号はカレントのメッセージリスト中の位置を表します。セッションをまたいだ場合、この番号は特定のメッセージに対して変わることがあります。
msgDataItem は取得したい一つ以上のデータ項目を指定するためのテキストです。複数のデータ項目を指定する場合、スペースを使用して各項目を区切ります。データ項目には二つの種類があります。
- 基本データ項目: 一部分の情報のみを取得する。
- マクロデータ項目: 基本データ項目から成るいくつかの部分項目の情報を一度に取得する。一般に使用されるデータ項目のセットが三つ定義されています。マクロはそれ自身でのみ使用され、他のマクロやデータ項目と一緒に使用することはできません。
データ項目については、後述の“基本データ項目”と“マクロデータ項目”の節を参照してください。
msgDataItemValue はテキスト変数で、msgDataItem 引数値に応じて一つのDataItem/DataItemValueペア、またはDataItem/DataItemValueペアのリストが返されます。
- ひとつのDataItem/DataItemValueの場合、返されるテキストのデータ構造は次のとおりです: DataItem name+Space+DataItemValue
- DataItem/DataItemValueペアのリストの場合、返されるテキストのデータ構造は次のとおりです: DataItem name1+Space+DataItemValue1+Space+DataItem name2+Space+DataItemValue2
msgDataItemValue にはmsgDataItem 引数に応じて、括弧に挟まれたリスト、クォートでくくられた文字列またはひとつの文字列が返されます。
- 括弧で挟まれたリストは以下の構造になっています (FLAGSの例題参照): (FirstDataItemValue+space+2ndDataItemValue)
括弧で挟まれたリストが括弧のみを返す場合、これは項目値がないことを示します。このルールは括弧に挟まれたアドレスリストには適用されません (ENVELOPE参照)。 - クォートでくくられた文字列の構造は以下のとおりです (INTERNALDATEの例題参照): DataItem name+Space+Quote+DataItemValue+Quote
DataItem が "" の場合、空の文字列を意味します。 - クォートで挟まれていない文字列は整数、倍長整数または数値を示し、構造は以下のとおりです: DataItem name+Space+DataItemValue
この場合、適切なタイプに変換する必要があります (UIDの例題参照)。
Note: クォートは、文字列にスペースや括弧など特別な文字が含まれる場合に使用されます。それゆえ、IMAP_Fetch コマンドの結果文字列を解析する際は、文字列の内容を処理する際にクォート文字を考慮します。
- INTERNALDATE
IMAPサーバ上のメッセージの内部的な日付と時刻を取得します。これは"Date"ヘッダの日付と時刻とは異なります。これはメッセージを受信した日付と時刻を示します。SMTPサーバから送信されたメッセージでは、この日付は通常メッセージの最終的な配送日付と時間を反映します。IMAP_Copy コマンドの後に送信されたメッセージでは、このデータは通常ソースメッセージの内部的な日付と時刻を反映します。
INTERNALDATEデータ項目値はクォートで囲まれて返されます。
例題:
msgDataItem:="INTERNALDATE"
$Err:=IMAP_MsgFetch(imap_ID;1;msgDataItem;msgDataItemValue)
msgDataItem には INTERNALDATE "17-Jul-2001 15:45:37 +0200" が返されます。
- FLAGS
指定されたメッセージに設定されたフラグが、括弧に挟まれて返されます。フラグはスペースで区切られます。
例題:
msgDataItem:="FLAGS"
$Err:=IMAP_MsgFetch(imap_ID;1;msgDataItem;msgDataItemValue)
指定したメッセージにフラグが付けられていない場合、
msgDataItem には FLAGS () が返されます。
\Seen と
\Answered フラグが指定されたメッセージに設定されている場合、
msgDataItem にはFLAGS (\Seen \Answered) が返されます。
- RFC822.SIZE
メッセージのバイトがRFC-822フォーマットで返されます。データ項目はスペースで区切られます。クォートでくくられた文字列が返されます。この文字列を倍長整数値に変換する必要があります (UIDの例題を参照)。
例題:
msgDataItem:="RFC822.SIZE"
$Err:=IMAP_MsgFetch(imap_ID;1;msgDataItem;msgDataItemValue)
msgDataItem には RFC822.SIZE 99599 が返されます。
- ENVELOPE
指定したメッセージのヘッダ部分が括弧つきリストで返されます。サーバは、メッセージヘッダを解析してこの値を返します。
ヘッダフィールドは以下の順で返されます: date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, message-id。date, subject, in-reply-to そして message-id フィールドはクォート付きで返されます: ENVELOPE ("date" "subject" (from) (sender) (reply-to) (to) (cc) (bcc) "in-reply-to" "message-id")
例題:
msgDataItem:="ENVELOPE"
$Err:=IMAP_MsgFetch(imap_ID;1;msgDataItem;msgDataItemValue)
msgDataItem には ENVELOPE ("Tue, 17 Jul 2001 17:26:34 +0200" "Test" (("RSmith" NIL "RSmith" "test")) (("RSmith" NIL "RSmith" "test")) (("RSmith" NIL "RSmith" "test")) (("RSmith" NIL "RSmith" "test")) () () "" "<ee6b33a.-1@Mail.x6foadRIbnm>") が返されます。
Date: | "Tue, 17 Jul 2001 17:26:34 +0200" | date ヘッダ |
Subject: | "Test" | subject ヘッダ |
From: | (("RSmith" NIL "RSmith" "test")) | アドレスストラクチャ |
Sender: | (("RSmith" NIL "RSmith" "test")) | アドレスストラクチャ |
reply-to: | (("RSmith" NIL "RSmith" "test")) | アドレスストラクチャ |
to: | (("RSmith" NIL "RSmith" "test")) | アドレスストラクチャ |
cc: | () | Cc ヘッダは使用されていない |
bcc: | () | Bcc ヘッダは使用されていない |
in-reply-to: | "" | In-reply-to ヘッダ |
message-id: | "<ee6b33a.-1@Mail.x6foadRIbnm>" | message-id ヘッダ |
from, sender, reply-to, to, cc そして bcc フィールドは括弧つきのアドレスストラクチャです。アドレスストラクチャは括弧つきのリストで、メールアドレスを示します。アドレスストラクチャフィールドは以下の順番です: 個人名, [SMTP] at-domain-list (ソースルート), メールボックス名、ホスト名。例えば、 (("RSmith" NIL "RSmith" "test")).
([RFC-822]) グループシンタックスはアドレスストラクチャの特別な形式で示され、ホスト名フィールドがNILになります。メールボックスフィールド名もNILの場合、これはグループ終了マーカ (RFC 822 シンタックスではセミコロン) です。メールボックス名フィールドがNILでない場合、これはグループ開始マーカで、メールボックス名フィールドはグループ名フレーズを保持します。
適用できないエンベロップのフィールドやアドレスストラクチャはNILとして表示されます。サーバはデフォルトで“from”フィールドから、reply-toとsenderフィールドを使用しなければならないことに注意してください。
- BODY
拡張データ (BODYSTRUCTUREを参照) を除き、BODYSTRUCTUREと同じ情報を返します。
例題:
msgDataItem:="BODY"
$Err:=IMAP_MsgFetch(imap_ID;1;msgDataItem;msgDataItemValue)
msgDataItem には BODY ("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "8BIT" 8 1) が返されます。
- BODYSTRUCTURE
メッセージのMIMEボディストラクチャを返します。サーバはメッセージヘッダのMIMEヘッダフィールドとボディパートのMIMEヘッダを解析して、結果を返します。このデータ項目は特に、メッセージをダウンロードせずにメッセージの内容をスキャンする場合に有効です。例えば、それぞれのパートのサイズを素早くチェックしたり、添付ファイルの名前を知る場合に有効です。BODYSTRUCTURE は括弧つきのリストで、括弧つきのリスト、クォートされた文字列、およびクォートなしの文字列を返します。
メッセージの内容により、BODYSTRUCTURE は“non-multipart”括弧つきリストまたはネストしたリスト (“multipart” 括弧つきリスト) になります:
- “non-multipart”括弧つきリスト: これは例えば、マルチパートでないメールと同様です。48行 2279バイトの単純なテキストメッセージは以下のようなボディストラクチャになります: ("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "8BIT" 8 1 NIL NIL NIL)。
“non-multipart”括弧つきフィールドの基本フィールドは以下の順番になります:
ボディタイプ | メディアタイプ名を示す文字列 (Content-type: メディアタイプ 例 TEXT) |
ボディサブタイプ | 内容のサブタイプ名 (Content-type: サブタイプ 例 PLAIN) |
ボディ引数 | 属性/値ペアの括弧つきリスト |
括弧つきリスト | [例 ("CHARSET" "US-ASCII" "NAME" "cc.diff") "CHARSET"の値が"US-ASCII"で、"NAME"の値が"cc.diff" |
ボディ id | コンテンツIDを与える (他のボディへの参照を可能にする)。ボディに"Content-ID"ヘッダフィールドでラベルが付けらる。multipart/alternative メディアタイプの場合、Content-ID値には特別な意味を持たせられる。これはRFC 2046のmultipart/alternativeの節で説明されている。 |
ボディ説明 | 内容の説明を与える文字列 |
ボディエンコーディング | コンテンツ転送エンコーディング (Content-Transfer-Encoding) |
ボディサイズ | ボディのサイズ (バイト)。これはtransfer encoding時のサイズであり、デコード後のサイズではない。 |
- MESSAGE タイプとRFC822サブタイプは、基本フィールドに続いて、エンベロップストラクチャ、ボディストラクチャ、カプセル化されたメッセージのテキスト行のサイズを含みます。
- TEXT タイプは、基本フィールドに続いて、テキスト行のボディサイズ、を含みます。これはtransfer encoding時のサイズであり、デコード後のサイズではないことに注意してください。拡張データは基本フィールド、そして上にあげたタイプ特有のフィールドが続きます。拡張データはBODYでは返されません。BODYSTRUCTURE を使用します。
“non multipart”括弧つきリストの拡張データは、もしあれば、指定された順番でなければなりません:
ボディ MD5 | [MD5]で定義された、ボディのMD5文字列 |
ボディ配置 | Disposition type文字列から成る括弧つきリストと、[DISPOSITION]で定義されたdispositionの属性名/属性値ペアの括弧つきリスト |
ボディ言語 | [LANGUAGE-TAGS]で定義された、ボディ言語を示す文字列または括弧つきリスト |
続く拡張データはこのバージョンのプロトコルでは定義されてなく、マルチパートの拡張データ下で定義されます。
例題: ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279 48 NIL NIL NIL)
説明: ("bodytype" "bodysubtype" (BodyParameterParenthesizedList) bodyId bodyDescription "bodyEncoding" BodySize BodySizeInTextLines ExtensionDataBODYmd5 ExtensionDataBodyDisposition ExtensionDataBodyLanguage) - “multipart”括弧つきリスト: これはマルチパートメールの場合です。これには“non-multipart”括弧つきリストが含まれます。
ネストされた括弧は、複数のパートを示します。括弧つきリストの最初の要素はボディタイプの代わりにネストしたボディです。括弧つきリストの二番目の要素はマルチパートのサブタイプ (mixed, digest, parallel, alternative, etc.) です。
マルチパートのサブタイプの次には拡張データが続きます。拡張データは、もしあれば、定められた順番となります。
ボディ引数 | 属性名/属性値の括弧つきリストの括弧つきリスト |
ボディ配置 | Disposition type文字列から成る括弧つきリストと、[DISPOSITION]で定義されたdispositionの属性名/属性値ペアの括弧つきリスト |
ボディ言語 | [LANGUAGE-TAGS]で定義された、ボディ言語を示す文字列または括弧つきリスト |
続く拡張データはこのバージョンのプロトコルでは定義されていません。この拡張データは0個以上のNIL、文字列、数値、またはこれらの括弧つきリストからなります。BODYSTRUCTURE のフェッチを行うクライアントの実装は、そのような拡張データを受け入れるように準備されていなければなりません。サーバの実装は、このプロトコルのリビジョンにより定義されるまで、そのような拡張データを送信してはなりません。
例題: BODYSTRUCTURE (("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "7BIT" 22 1 NIL NIL NIL)("APPLICATION" "BYTE-STREAM" ("NAME" "casta37.jpg" "X-MAC-TYPE" "4A504547" "X-MAC-CREATOR" "6F676C65") NIL NIL "BASE64" 98642 NIL ("ATTACHMENT" ("FILENAME" "casta37.jpg")) NIL) "MIXED" ("BOUNDARY" "4D_====================1385356==") NIL NIL)
説明: (("bodytype" "bodysubtype" (BodyParameterParenthesizedList) bodyId bodyDescription "bodyEncoding" BodySize BodySizeInTextLines ExtensionDataBODYmd5 ExtensionDataBodyDisposition ExtensionDataBodyLanguage) ("bodytype" "bodysubtype" (BodyParameterParenthesizedList) bodyId bodyDescription "bodyEncoding" BodySize BodySizeInTextLines ExtensionDataBODYmd5 ExtensionDataBodyDisposition ExtensionDataBodyLanguage) "multipartSubtype" (ExtensionDataBodyParameterList) ExtensionDataBodyDisposition ExtensionDataBodyLanguage))
- UID
メッセージのユニークなIDを取得します。これはIMAP_UIDToMsgNumを実行するのと同じことです。この数値はテキストエリアに返されるので、倍長整数値に変換しなければなりません。
例題:
msgDataItem:="UID"
$Err:=IMAP_MsgFetch(imap_ID;1;msgDataItem;msgDataItemValue)
msgDataItemValue にはUID 250000186が返されます。
倍長整数に変換するには:
C_LONGINT(vLongint)
VLongint:=Num("250000186")
- FAST
以下のマクロと同等: (FLAGS INTERNALDATE RFC822.SIZE)
例題:
msgDataItemValue には "FLAGS (\Seen \Answered) INTERNALDATE "17-Jul-2001 15:45:37 +0200" RFC822.SIZE 99599" が返されます。
- ALL
以下のマクロと同等: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
- FULL
以下のマクロと同等: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)