MIME メッセージの作成、記述および読み取り
InterSystems IRIS® データ・プラットフォームでは、マルチパート MIME メッセージの作成に使用できるクラス (%Net.MIMEPartOpens in a new tab) を提供します。SOAP メッセージに追加する添付を作成するには、このクラスを使用します。"Web サービスおよび Web クライアントの作成" を参照してください。電子メールの処理や HTTP マルチパート POST など、他にも多くのアプリケーションが考えられます。
概要
MIME 形式のドキュメントは、MIME パートと呼ばれます。各 MIME パートにはヘッダがあり、メッセージ本文 (テキストまたはバイナリのいずれか)、または追加 MIME パートが含まれます。MIME-Version ヘッダを持つ MIME パートは、トップレベル・ドキュメントとして使用でき、MIME メッセージと呼ばれます。次の図に例を示します。
この例で、E と F には、表示されない追加サブパートがあります。
MIME パートを表示するには、ヘッダおよびこのパートのコンテンツの設定に使用するプロパティを提供する %Net.MIMEPartOpens in a new tab クラスを使用します。
MIME パートの作成
MIME パートを作成する手順は以下のとおりです。
-
%Net.MIMEPartOpens in a new tab のインスタンスを作成します。
-
以下のいずれかを行います。
-
テキストまたはバイナリの本文を追加します。そのためには、ストリーム (テキストまたはバイナリのいずれか) のインスタンスを作成し、MIME パートの Body プロパティをこのストリームと等しくなるように設定します。データをこのストリームに書き込むには、標準のストリーム・インタフェースを使用します。Parts プロパティの値は指定しないでください。
-
MIME パートのリストを追加します。そのためには、ここで説明したとおりに MIME パートを作成し、Parts プロパティをこれらのパートのリストと等しくなるように設定します。Body プロパティの値は指定しないでください。
-
-
オプションで、"MIME パート・ヘッダの設定と取得" の説明に従って、ヘッダを設定します。
MIME パート・ヘッダの設定と取得
HTTP ヘッダの値を設定および取得できます。%Net.MIMEPartOpens in a new tab の以下のプロパティが MIME ヘッダに影響します。
-
ContentType — Content-Type ヘッダのインターネット・メディア・タイプOpens in a new tab (MIME タイプ)。これは、Body データのインターネット・メディア・タイプを指定します。例えば、"text/plain"、"text/html"、"image/jpeg"、"multipart/mixed" です。
-
ContentCharset — Content-Type ヘッダの charset パート。これを設定する場合、まず、ContentType プロパティを設定する必要があります。テキストの本文を含む各 MIME パートに対し、本文で使用する文字セットを指定するよう、ContentCharset プロパティを正しく設定しください。%Net.MIMEPartOpens in a new tab では、変換は行われないため、このプロパティでは、既に使用されている文字セットを宣言する必要があります。
-
ContentId — 山括弧 (<>) および先頭と末尾の空白のない、正規化された Content-ID ヘッダ。
-
ContentLocation — 先頭と末尾の空白のない、正規化された Content-Location ヘッダ。
-
ContentTransferEncoding — Content-Transfer-Encoding ヘッダ。このプロパティは、"base64"、"quoted-printable"、"7bit"、"8bit" のいずれかです。
既定値はありません。
Important:コンテンツを "base64" でエンコードする場合、Unicode 文字を含めることはできません。送信するコンテンツに Unicode 文字が含まれている場合は必ず、$ZCONVERT を使用してコンテンツを UTF-8 に変換してから、base-64 でエンコードしてください。以下に例を示します。
set BinaryText=$ZCONVERT(UnicodeText,"O","UTF8") set Base64Encoded=$system.Encryption.Base64Encode(BinaryText)
受信者は、逆のプロセスを使用してテキストをデコードする必要があります。
set BinaryText=$system.Encryption.Base64Decode(Base64Encoded) set UnicodeText=$ZCONVERT(BinaryText,"I","UTF8")
%Net.MIMEPartOpens in a new tab クラスは、MIME ヘッダの管理に使用できる一般的なメソッドを提供します。
-
GetHeader() は、ヘッダの値を返します。
-
NextHeader() は、次のヘッダを取得します。
-
SetHeader() は、ヘッダの値を設定します。通常、これを使用して、標準外ヘッダを設定します。
-
RemoveHeader() は、ヘッダを削除します。
完全なメソッド・シグニチャおよびその他の詳細は、%Net.MIMEPartOpens in a new tab のクラス・ドキュメントを参照してください。
オプションのメッセージ範囲の値を指定
既定では、メッセージ範囲は、自動的に生成されます。必要に応じて、メッセージの範囲を指定できます。そのためには、Boundary プロパティの値を指定します。どのメッセージ・パートでも使用される可能性が極めて低い文字列を使用するようにしてください。
MIME メッセージの記述
MIME メッセージを記述するには、以下のように %Net.MIMEWriterOpens in a new tab を使用します。
-
%Net.MIMEWriterOpens in a new tab クラスのインスタンスを作成します。
-
オプションで、出力先を指定します。出力先を指定するには、ライター・インスタンスの OutputToDevice() (既定)、OutputToFile()、または OutputToStream() のメソッドのいずれかを使用します。
-
必要に応じて、ライターのメソッドを呼び出して、出力を記述します。
-
ヘッダ名および値を指定すると、WriteHeader() がそのヘッダを記述します。
-
%Net.MIMEPartOpens in a new tab のインスタンスを指定すると、WriteMIMEBody() が、メッセージの本文を記述します。これは、複数のパートを持つことが可能です。
メッセージがマルチパートの場合、このメソッドは、ヘッダを記述しません。ユーザの責任でヘッダを記述してください。ただし、メッセージがマルチパートではない場合、メソッドはヘッダを記述します。
-
%Net.MIMEPartOpens in a new tab のインスタンスを指定すると、WriteMIMEMessage() は、すべてのヘッダを含む、MIME メッセージを記述します。
シングルパートのメッセージの場合、WriteMIMEBody() および WriteMIMEMessage() は、同じ出力を生成します。
-
完全なメソッド・シグニチャおよびその他の詳細は、%Net.MIMEPartOpens in a new tab のクラス・ドキュメントを参照してください。
例 : WriteMIMEMessage()
以下の例は、WriteMIMEMessage() の使用法を示しています。
ClassMethod WriteMIMEMessage(text As %String,header as %String) as %Status
{
Set msg=##class(%Net.MIMEPart).%New()
Set msg.Body=##class(%GlobalCharacterStream).%New()
Do msg.Body.Write(text)
//specify some headers
Set msg.ContentType="text/html"
Set msg.ContentCharset="us-ascii"
Do msg.SetHeader("Custom-header",header)
//create MIME writer; write MIME message
Set writer=##class(%Net.MIMEWriter).%New()
Set status=writer.WriteMIMEMessage(msg)
If $$$ISERR(status) do $system.Status.DisplayError(status)
Quit $$$OK
}
以下のターミナル・セッションでは、このメソッドが使用されています。
GNET> Set text = "message text"
GNET> Set header="my header value"
GNET> Do ##class(GNET.MIME).WriteMIMEMessage(text,header)
CONTENT-TYPE: text/html
Custom-header: my header value
message text
GNET>
MIME メッセージの読み取り
MIME メッセージを読み取るには、以下のように %Net.MIMEReaderOpens in a new tab を使用します。
-
%Net.MIMEReaderOpens in a new tab クラスのインスタンスを作成します。
-
入力のソースを指定します。入力のソースを指定するには、リーダ・インスタンスの OpenFile() メソッドまたは OpenStream() メソッドを使用します。
-
リーダ・インスタンスの ReadMIMEMessage() メソッドを呼び出します。このメソッドは、最初の引数として %Net.MIMEPartOpens in a new tab のインスタンスを参照によって返します。これはステータスを返すので、それを確認する必要があります。
完全なメソッド・シグニチャおよびその他の詳細は、%Net.MIMEPartOpens in a new tab のクラス・ドキュメントを参照してください。