C++ にて VMime を使って HTMLメールをファイルから読む

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 で見るとこうなる。

f:id:ken_ohwada:20210122105242p:plain
html file

全体のコードは、githubに公開した。
https://github.com/ohwada/MAC_cpp_Samples/tree/master/vmime/read