messagesDescription本発明は、メッセージの受信装置、及び受信装置が行うデータ抽出方法に関する。Protocol)メッセージの送受信時に、メッセージ本体にファイルを添付することが一般的に行われている。Extension)形式が一般的に広く使われている。MIME/Multipartでは、メッセージ本文と添付ファイルをバウンダリ文字列で区切ることにより複数パートを1つにパッケージングしてマルチパートメッセージとすることを可能にしている。特許文献1には、マルチパートメッセージから検出されるバウンダリ文字列によって、メール本文のパートと添付ファイルのパートを区別することについて記載されている。特開2008−109381号公報しかしながら、マルチパートメッセージに含まれるデータを抽出するための処理負荷が大きくなってしまう場合があった。MIME/Multipart仕様のマルチパートメッセージから、あるパートのデータを抽出するためには、マルチパートメッセージをはじめから順番に読んでいき、読んだデータをバウンダリ文字列と比較していく必要がある。このため、特に大容量のデータが添付されている場合、受信側の処理負荷が大きくなってしまうことがあった。本発明は、上記の問題点に鑑みてなされたものであり、その目的は、マルチパートメッセージに含まれるデータを抽出するための処理負荷を低減することである。上記の問題点を解決するために、本発明の受信装置は、例えば、以下の構成を有する。第1及び第2のメッセージを受信する受信装置であって、前記第1のメッセージと前記第2のメッセージが対応するか判断する判断手段と、前記第1のメッセージからデータ長を表わすデータ長情報を取得する取得手段と、前記第1のメッセージに対応すると前記判断手段が判断した前記第2のメッセージから前記データ長情報に基づいて前記データ長のデータを抽出する抽出手段とを有する。本発明のデータ抽出方法は、第1及び第2のメッセージを受信する受信装置が行うデータ抽出方法であって、前記第1のメッセージと前記第2のメッセージが対応するか判断する判断工程と、前記第1のメッセージからデータ長を表わすデータ長情報を取得する取得工程と、前記第1のメッセージに対応すると前記判断工程で判断した前記第2のメッセージから前記データ長情報に基づいて前記データ長のデータを抽出する抽出工程とを有する。本発明によれば、マルチパートメッセージに含まれるデータを抽出するための処理負荷を低減できる。<実施形態1>以下、図面を参照しながら発明を実施するための形態について詳細に説明する。図1は、本実施形態におけるネットワークの構成例を示すブロック図である。図1において101、102はそれぞれ同等の機能を有する通信装置であるが、本形態では、送信装置101から受信装置102へメッセージを送信する場合について説明する。110はネットワークであり、送信装置101、及び受信装置102はネットワーク110によりお互いに接続されている。次に、送信装置101、及び受信装置102のハードウェア構成について図2を用いて説明する。上述のように、本形態における送信装置101、及び受信装置102はそれぞれ同等の機能を有する通信装置である。送信装置101がメッセージの送信専用の装置であり、受信装置102がメッセージの受信専用の装置であっても良い。送信装置101、受信装置102は、パーソナルコンピュータ、ワークステーション、ノートブックPC、コンピュータを内蔵した各種家電製品、ゲーム機、携帯電話、デジタルビデオカメラ、デジタルカメラなどのうち、メッセージを通信可能な機器によって実施可能である。図2は、送信装置101、受信装置102のハードウェア構成の一例を示すブロック図である。送信装置101、受信装置102は、それぞれ、制御部201、入力部202、出力部203、通信制御部204、及び記憶部205を備える。図2において、制御部201は、CPU、ROM、RAM、及び周辺機器などを含み、装置全体を制御する。入力部202は、キーボードやマウスなどを接続するためのインターフェースを含み、自装置への指示や各種入力を制御する。出力部203は、ディスプレイなどを接続するためのインターフェースを含み、自装置の状態や処理結果などの出力を制御する。通信制御部204は、ネットワークとの間で通信するためのインターフェースを含み、ネットワーク110を通して他の通信装置との通信を制御する。記憶部205は、大容量記憶装置へのアクセスを制御するインターフェースを含む記憶部である。システムバス210により、上述の各部が接続されている。次に、送信装置101と受信装置102との間で行われる、マルチパートメッセージの送受信処理の流れについて図3を用いて説明する。マルチパートメッセージとは、メッセージ本文のパートと、例えば1つ以上の添付ファイルのパートとを含む複数のパートで構成されたメッセージである。このメッセージ本文と添付ファイルを例えば、バウンダリ文字列で区切ることにより、複数のパートを含むメッセージを1つのマルチパートメッセージとして送受信することができる。マルチパートメッセージとして送受信されるメッセージの例として、例えば、電子メールやSOAPメッセージがある。図3は、送信装置101から受信装置102にマルチパートメッセージを送受信する際の処理の概要を示すシーケンス図である。S301において、送信装置101は、通信制御部204を介して、MessageIdとContentId、及び各パートのデータ長を含むメッセージ情報(第1のメッセージ)を受信装置102に対して送信する。このMessageIDは、これから送信されるマルチパートメッセージ(第2のメッセージ)の識別情報(MessageID)である。ContentIDは、マルチパートメッセージである第2のメッセージに含まれる各パートの識別情報(ContentID)であり、データ長は、第2のメッセージの各パートのデータ長の情報である。MessageIDとは、マルチパートメッセージに固有に割り当てられる文字列である。ContentIDとは、マルチパートメッセージで送られる各パートのコンテンツにそれぞれ固有に割り当てられる文字列である。メッセージ情報には、これから送信されるマルチパートメッセージの識別情報(MessageID)と、それに含まれる各パートの識別情報(ContentID)と、各パートのデータ長の情報が含まれる。トランスポートプロトコルを通じて、SOAPメッセージごとにActionの値が送信される。受信装置102は、受信したメッセージのActionの値に基づいて、受信したメッセージがメッセージ情報(第1のメッセージ)であるか判定することができる。S301において、通信制御部204を介してメッセージ情報(第1のメッセージ)を受け取った受信装置102は、それに含まれる各データを制御部201に含まれるRAMに記憶する。次にS302において、受信装置102は、メッセージ情報の受信確認を通信制御部204を介して送信装置101に送信し、S303に進む。S303において、送信装置101は、S301で送信したメッセージ情報と同じMessageIDを持つマルチパートメッセージ(第2のメッセージ)を通信制御部204を介して受信装置102へ送信する。このように、本形態の送信装置101は、メッセージ情報の受信確認を受け取ってからマルチパートメッセージを送信する。このようにすることで、受信装置102がメッセージ情報の受信処理を完了していない状態でマルチパートメッセージを受信してしまうことにより、メッセージ情報を利用したパート抽出できなくなることを防止する。本形態の送信装置101は、メッセージ情報を送信してから一定時間経過してもメッセージ情報の受信確認を受信しなかった場合、メッセージ情報(第1のメッセージ)を再送する。このようにすることによって、受信装置102が何らかの理由によってメッセージ情報が正常に受信できなかった場合でも、再送されたメッセージ情報を取得することができる。メッセージ情報の再送は行わずに、マルチパートメッセージを送るようにしても良い。S303において、マルチパートメッセージを受信した受信装置102は、受信したマルチパートメッセージに対応するメッセージ情報のデータが記憶されているか判断する。マルチパートメッセージに対応するメッセージ情報のデータが記憶されている場合は、各パートのデータ長の値を読み出す。S303において、受信装置102は、受信したマルチパートメッセージに含まれるMessageIDと同じMessageIDをRAMから検索する。MessageIDがRAMから見つかった場合は、そのMessageIDに対応付けて記憶されている各パートのデータ長を読み出す。図4は、メッセージ情報、及びマルチパートメッセージの例を模式化したものである。本実施形態で送信されるマルチパートメッセージはSOAPメッセージである。Protocol)をトランスポートプロトコルとして通信される。Protocol)やその他のプロトコルを使って送信される場合も本発明は適用可能である。図4において、401は、S301で送られるメッセージ情報の例である。402は、S303で送信されるマルチパートメッセージの例である。図4に示すように、メッセージ情報401の<soap:Body>(SOAPボディ)に含まれるMessageIDと、マルチパートメッセージ402のヘッダに記述されているMessageIDは同じ文字列である。これは、メッセージ情報401がマルチパートメッセージ402に対応していることを示している。図4に示すメッセージ情報401が、マルチパートメッセージ402の各パートのデータ長を列挙したメッセージ情報だということを示している。メッセージ情報401のMessageId要素に続くparts要素は複数のpart要素をもつことが可能である。各part要素の子要素として記述されるcontentId要素には、マルチパートメッセージ402の対応するパートのContentIdが記述される。各ContentIDの子要素であるlength要素には、それぞれ、マルチパートメッセージ402の対応するパートのデータ長が記述される。メッセージ情報401に記述される1つのpart要素が、マルチパートメッセージ402における1つのパートに対応している。part要素に含まれるlength要素には、マルチパートメッセージ402において対応するパートのデータ長が記述されている。本実施形態では、マルチパートメッセージ402に含まれる第1の添付ファイルのContentId(attachment1@canon.com)が矢印411で示すようにメッセージ情報401に記述されている。マルチパートメッセージ402に含まれる第2の添付ファイルのContentId(attachment2@canon.com)が、矢印412に示すようにメッセージ情報401に記述される。メッセージ情報401に含まれるデータ長は、マルチパートメッセージ402に含まれる添付ファイルのデータ長であるが、添付ファイルのヘッダ(図4におけるContentIDなど)のデータ長は、含まない。次に、メッセージ情報とマルチパートメッセージを受信する受信装置102の処理について図5を用いて詳細に説明する。受信装置102は、メッセージ情報(第1のメッセージ)、及びマルチパートメッセージ(第2のメッセージ)を受信する受信装置である。本実施形態の受信装置102は、図5を用いて説明する各処理を、記憶されたプログラムに基づいて行う。受信装置102の制御部101は、例えば記憶部205に記憶されている本発明に係るプログラムを適宜読み出し、処理を実行する。上述のように、受信装置102の制御部101には、CPU、ROM、RAMが含まれている。図5は、受信装置102がメッセージを受け取る際の処理の詳細を示したフローチャートである。受信装置102はS501でメッセージを受信すると、S502に進む。S502において、受信装置102の制御部201は、受信したメッセージに記述されているActionの値が、データ長を列挙したメッセージ情報のActionの値と一致するか判定する。メッセージ情報に対応するActionの値は、予め決められている。S502において、受信したメッセージのActionの値とメッセージ情報のActionの値が一致する場合、制御部201は、それがメッセージ情報401であると判断し、S503に進む。受信したメッセージのActionの値とメッセージ情報のActionの値が一致しない場合、制御部201は、それがメッセージ情報ではないと判断し、S505に進む。S502において、制御部201は、S501で受信したメッセージが、メッセージ情報であるか否かを判定する。S503において、制御部201は、メッセージ情報のボディを読み込み、ボディから取得したMessageIdを記憶し、S504に進む。上述のように、制御部201には、CPU、RAM、ROM等が含まれている。S504(取得手順)において、制御部201は、メッセージ情報のボディを読み込み、ボディから取得したContentIdの値とそれに対応するデータ長の値とを組にしてMessageIdと対応付けて記録し、受信処理を終了する。S510において、制御部201は、メッセージ情報(第1のメッセージ)からデータ長を表わすデータ長情報を取得する。S504の処理が終了した時点において、受信装置102の制御部201には、MessageIDと、そのメッセージに含まれる各パートのContentID、及び、各パートのデータ長が対応付けられた状態で記憶される。図4の例に示したように、マルチパートメッセージ402に複数のパートが存在する場合、それぞれのパートにContentIDが付加される。マルチパートメッセージ(第2のメッセージ)には、ContentIDがattachment1@canon.comで示されるパート(第1のデータ)とattachment2@canon.comで示されるパート(第2のデータ)が含まれている。制御部201は、メッセージ情報を受信すると、S504において、第1のデータのContentIDと第1のデータ長(102400)の情報、及び、第2のデータのContentIDと第2のデータ長(204800)の情報を取得する。制御部201は、S504で、メッセージ情報から、マルチパートメッセージに含まれる第1のデータの識別情報(ContentID)を含む第1のデータ長情報、及び第2のデータの識別情報(ContentID)を含む第2のデータ長情報を取得する。S502において、制御部201は、Actionの値があらかじめ登録されているメッセージ情報のActionの値と違う場合、S505において、送られてきたメッセージがマルチパートメッセージか否かを判断する。送られてきたメッセージがマルチパートメッセージではない場合、S506においてメッセージを処理して終了する。送られてきたメッセージがマルチパートメッセージか否かは、受信したメッセージのヘッダに含まれる情報から判断する。S505において、送られてきたメッセージがマルチパートメッセージであると判断された場合は、S507に進む。S507(判断手順)において、受信装置102の制御部201は、マルチパートメッセージのMessageIdが受信装置102の制御部201に記憶されているか否かを確認する。マルチパートメッセージに対応するメッセージ情報をすでに受信している場合は、MessageIDが制御部201に記憶されている。受信装置102の制御部201は、S507において、メッセージ情報(第1のメッセージ)とマルチパートメッセージ(第2のメッセージ)が対応するか判断する。制御部201は、識別情報(MessageID)に応じて、メッセージ情報とマルチパートメッセージが対応するか判断する。受信装置102に送られてきたマルチパートメッセージのMessageIdが記憶されていない場合、S508に進む。S508において、受信装置102の制御部201は、通常のMIME−Multipartにおけるパートの区切りを特定する処理を行う。制御部201は、マルチパートメッセージを先頭から順に読み込み、読み込んだデータとバウンダリ文字列を比較し、バウンダリ文字列が出現した箇所をパートの区切りとして特定し、S509に進む。S507でMessageIdが受信装置102の制御部201に記憶されていると判断された場合、S510に進む。S510において、制御部201は、MessageIdに対応されているContentIdとデータ長の値の組を取り出し、MIME−Multipartの各パートのヘッダに記述されているContentIdからデータ長を取得する。制御部201は、マルチパートメッセージを先頭から順に読み込んでいく。その結果、S504で記憶したContentIDを検出すると、制御部201は、そのContentIDのヘッダの次からバウンダリ文字列との比較を行わずに、読み込んだバイト数をカウントしていく。そのカウント値が取得したデータ長に合致したところをパートの区切りとして特定し、S509に進む。この一致した個所にバウンダリ文字列が存在するか、確認してもよい。本形態において、制御部201は、メッセージの本文に添付されたパートが開始する位置を、文字列の検出によって行う。制御部201は、メッセージの先頭から文字列を読み込み、添付されたパートの開始を示す文字列(バウンダリ文字列)を検出する。検出された文字列から上述のデータ長の情報を用いて、当該パートの区切りを特定する。S504において、複数のデータ長情報を取得している場合、制御部201は、複数のデータ長情報に基づいて、複数のパートのそれぞれの区切りを特定する。S510において、制御部がパートの区切りを特定するとS509に進む。S509(抽出手順)において、制御部201は、S508又はS510で特定されたパートの区切りに基づいて、マルチパートメッセージの各パートを抽出する。S510において、メッセージ情報からデータ長情報を取得していた場合、それに基づいてデータ長のデータ(パート)を抽出する。S509において、制御部201は、メッセージ情報(第1のメッセージ)に対応すると判断されたマルチパートメッセージ(第2のメッセージ)から、データ長情報に基づいてデータ長のデータを抽出する。S504において、複数のデータ長情報を取得している場合、その複数のデータ長情報に基づいて、複数のパートのデータを抽出する。制御部201は、第1のデータ長情報に基づいて、マルチパートメッセージに含まれる第1のデータを抽出し、第2のデータ長情報に基づいて、マルチパートメッセージに含まれる第2のデータを抽出する。S508において、バウンダリ文字列の検出によってパートの区切りを特定した場合は、その検出結果に基づいて各パートを抽出する。制御部201は、S509において、各パートを抽出した後、パートのデータに応じた処理を実行し、メッセージの受信処理を終了する。パートのデータに応じた処理には、例えば、パートのデータの表示、再生、記録などを含む。以上説明したように、本形態の受信装置102は、受信されたマルチパートメッセージに対応するメッセージ情報が記憶されているか否かに応じて、各パートを抽出する処理を切り替える。マルチパートメッセージに対応するメッセージ情報が記憶されている場合は、メッセージ情報に含まれる各part要素のlength(データ長)の値を用いて、各パートを抽出する。マルチパートメッセージに対応するメッセージ情報が記憶されていない場合は、受信したメッセージのデータを順次読み出し、各パートの区切りを示すバウンダリ文字列との比較を行うことによって特定された各パートの区切りに基づいて各パートを抽出する。このようにすることで、受信装置102は、あらかじめデータ長を列挙したメッセージ情報を送ってこない送信装置からマルチパートメッセージを受信した場合には、バウンダリを検索することで各パートのデータを抽出できる。データ長を列挙したメッセージ情報を送ってくる送信装置からマルチパートメッセージを受信した場合には、バウンダリを検索するのではなく、バイト数を単純にカウントする処理で各パートのデータを抽出できる。従って、相互接続性を妨げずにより高速にマルチパートメッセージから各パートのデータを抽出することが可能となる。前記第1のメッセージに対応すると前記判断手段が判断した前記第2のメッセージから前記データ長情報に基づいて前記データ長のデータを抽出する抽出手段とを有することを特徴とする受信装置。前記抽出手段は、前記第1のデータ長情報に基づいて、前記第2のメッセージに含まれる第1のデータを抽出し、前記第2のデータ長情報に基づいて、前記第2のメッセージに含まれる第2のデータを抽出することを特徴とする請求項1記載の受信装置。前記抽出手段は、前記検出された文字列、及び、前記データ長情報に基づいて、前記データ長のデータを抽出することを特徴とする請求項1記載の受信装置。前記検出手段による前記文字列の検出に応じて前記データ長のデータを抽出することを特徴とする請求項2記載の受信装置。前記第1のメッセージに対応すると前記判断工程で判断した前記第2のメッセージから前記データ長情報に基づいて前記データ長のデータを抽出する抽出工程とを有することを特徴とするデータ抽出方法。前記第1のメッセージに対応すると前記判断手順で判断した前記第2のメッセージから前記データ長情報に基づいて前記データ長のデータを抽出する抽出手順とを実行させることを特徴とするプログラム。