Mimetic库分析2-——入口类MimeEntity

2013/05/31 posted in  远古知识

整个Mimetic的入口类就是MimeEntity类,整个MIME格式文件或者字符串都是在MimeEntity内部完成解析的。
MimeEntity类很简单,其成员如下:

MimeEntity类提供了两种常用的初始化方式

迭代器初始化:

ifstream file_in("test.eml");  //文件流
ostrstream ostr<<ifstream;  //转换成strstream
string str_eml=ostr.str();     //将ifstream转换成string字符串
MimeEntity me(str_eml.begin(),str_eml.end());  

流初始化

ifstream file_in("test.eml");         
MimeEntity me(file_in);

其中MimeEntity(Iterator beg,Iterator end,int mask = imNone)这个构造函数的第三个参数mask是解析参数,可以去下列值:

imNone   //完整解析整个MIME格式文件
imHeader  //忽略MIME头
imBody     //忽略MIME正文
imChildParts  //忽略嵌套的MIME
imPreamble   //忽略冗余头
imEpilogue    //忽略结束符

MimeEntity将整个MIME格式分成两部分,以空格(\r\n\r\n)为分割符,空格以上的为MIME头,存放在m_header中,空格以下的为MIME正文,存放在m_body中,可以分别通过调用成员函数header()和body()得到相应的类型值。

#include<iostream>
#include<mimetic/mimetic.h>
    
using namespace std;
using namespace mimetic;
    
int main()
{               
    ifstream file_in("test.eml");         
    if(!file_in)
        return -1;
    MimeEntity me(file_in);
    cout<<me<<endl;   //可以直接打印出该邮件内容
    return 0;
}