C++ にて VMime を使って HTMLメールを作成する
の続きです。
HTML メールの構造
下記のように、multipartの中に本文とHTMLのデータがある。
Content-Type: multipart/alternative
Content-Type: text/plain
本文のデータContent-Type: text/html
HTML のデータ
HTML をどう扱うかは明文化された仕様はなくメールアプリに任されている。
今回は、HTML をファイルに保存して、webブラウザで読むという方法とする。
メールメッセージからHTMLデータ を取得する
C++ にて VMime を使って 添付ファイル付きのメールをファイルから読む
で紹介したように、vmime::bodyPart を使用する。
本文(plain)かHTMLかは、Content-Typeで識別できる。
text/plain なら本文、text/htmlならHTMLである。
下記のように記述する。
vmime::shared_ptr <vmime::body> body = msg->getBody(); size_t count = body->getPartCount(); for(int i=0; i<count; i++){ vmime::shared_ptr<vmime::bodyPart> part = body->getPartAt(i); vmime::shared_ptr< vmime::header > part_hdr = part->getHeader(); // Content-Type を取得する vmime::shared_ptr< const vmime::headerField > hdr_type = hdr->ContentType(); vmime::shared_ptr< const vmime::mediaType > media_type = hdr_type->getValue<vmime::mediaType>(); std::string type = media_type->getType(); std::string subtype = media_type->getSubType(); if(type="text"){ if(subtype == "plain") { // 本文として表示する } if(subtype == "html" ){ // HTMLとしてファイルに保存する } } }
保存したHTMLをブラウザアプリの Chrome で見るとこうなる。
全体のコードは、githubに公開した。
https://github.com/ohwada/MAC_cpp_Samples/tree/master/vmime/read