VMime Book 日本語訳 第4章 4.6

VMime Book 日本語訳 第4章 4.6
2020-07-01 K.OHWADA

原文
VMime Book: A Developer’s Guide To VMime
https://www.vmime.org/public/documentation/book/vmime-book.pdf

全体目次

第4章 基本

Basics

ページ内 目次
4.6 コンテンツハンドラ
4.6.1 はじめに
4.6.2 コンテンツハンドラーからのデータの抽出
4.6.3 コンテンツハンドラーの作成

4.6 コンテンツハンドラ

Content handlers

4.6.1 はじめに

Introduction

コンテンツハンドラーは、データソースを抽象化したものです。 これらは現在、後で使用するために一部のデータを保存する必要がある場合に使用されます(たとえば、体の部分の内容、添付ファイルのデータなど)。
データはエンコードまたは非エンコードで保存できます(エンコードの詳細については、4.9を参照してください)。

4.6.2 コンテンツハンドラーからのデータの抽出 Extracting data from content handlers

extract()メソッド(エンコードされている場合はデータを自動的にデコードする)またはextractRaw()(デコードを実行せずにデータを抽出する)を使用して、コンテンツハンドラーでデータを抽出できます。
次の例は、メッセージから本文テキストを抽出し、それを文字セット変換を使用して標準出力に書き込む方法を示しています。

リスト4.8:コンテンツハンドラーを使用してメッセージから本文テキストを抽出する
Using content handlers to extract body text from a message

// Suppose we already have a message
vmime::shared ptr <vmime::message> msg;
// Obtains a reference to the body contents
vmime::shared ptr <vmime::body> body = msg−>getBody();
vmime::shared ptr <vmime::contentHandler> cts = body−>getContents();
vmime::utility::outputStreamAdapter out(std::cout); cts−>extract(out);

注:
本文の内容は「そのまま」抽出されます。文字セット変換は実行されません。
文字セット間の変換の詳細については、4.7を参照してください。

4.6.3 コンテンツハンドラーの作成

Creating content handlers

ッセージを作成するときに、本文部分のコンテンツを設定する場合は、コンテンツハンドラーをインスタンス化する必要がある場合があります。
次のコードスニペットは、文字列からパーツの本文を設定する方法を示しています。

リスト4.9:本文の内容を設定する
Setting the contents of a body part

// Set the contents
p a r t −> g e t B o d y ( ) − > s e t C o n t e n t s ( c t h ) ;

コンテンツハンドラーは、添付ファイルを作成するときにも使用されます。
次の例は、ファイルから添付ファイルを作成する方法を示しています

リスト4.10:ファイルから添付ファイルを作成する
Creating an attachment from a file

// Create a stream from a file
std : : ifstream∗ fileStream = new std : : ifstream ( ) ; fileStream−>open(”/home/vincent/paris.jpg”, std::ios::binary);
if (!∗fileStream) // handle error
vmime::shared ptr <utility::stream> dataStream =
vmime::make shared <vmime:: utility ::inputStreamPointerAdapter>(fileStream);
// NOTE: ’fileStream ’ will be automatically deleted // when ’dataStream’ is deleted
// Create a new content handler
vmime: : shared ptr <contentHandler> data =
vmime : : make shared <vmime : : streamContentHandler>(dataStream , 0 ) ;
// Now create the attachment
ref <vmime: : attachment> att = vmime: : make shared <vmime: : defaultAttachment> (
/∗ attachment data ∗/ data,
/∗ content type ∗/ /∗ description ∗/ /∗ filename ∗/
vmime::mediaType(”image/jpeg”), vmime::text(”Holiday photo”), vmime::word(”paris.jpg”)

後で、vmime::fileAttachment クラスが、ファイルから添付ファイルを作成するためのすべてのメカニズムをすでにカプセル化していることがわかります。