acl  3.5.3.0
acl::mime类 参考

#include <mime.hpp>

+ 类 acl::mime 继承关系图:
+ acl::mime 的协作图:

Public 成员函数

 mime (void)
 
 ~mime (void)
 
mimereset (void)
 
void primary_head_finish (void)
 
bool primary_head_ok (void) const
 
void update_begin (const char *path)
 
bool update (const char *data, size_t len)
 
void update_end (void)
 
bool parse (const char *file_path)
 
bool save_as (ostream &out)
 
bool save_as (const char *file_path)
 
bool save_mail (const char *path, const char *filename, bool enableDecode=true, const char *toCharset="gb2312", off_t off=0)
 
mime_bodyget_body_node (bool htmlFirst, bool enableDecode=true, const char *toCharset="gb2312", off_t off=0)
 
mime_bodyget_plain_body (bool enableDecode=true, const char *toCharset="gb2312", off_t off=0)
 
mime_bodyget_html_body (bool enableDecode=true, const char *toCharset="gb2312", off_t off=0)
 
const std::list< mime_node * > & get_mime_nodes (bool enableDecode=true, const char *toCharset="gb2312", off_t off=0)
 
const std::list< mime_attach * > & get_attachments (bool enableDecode=true, const char *toCharset="gb2312", off_t off=0, bool all=true)
 
const std::list< mime_image * > & get_images (bool enableDecode=true, const char *toCharset="gb2312", off_t off=0)
 
mime_imageget_image (const char *cld, bool enableDecode=true, const char *toCharset="gb2312", off_t off=0)
 
void mime_debug (const char *save_path, bool decode=true)
 
mimeset_sender (const char *addr)
 
mimeset_from (const char *addr)
 
mimeset_replyto (const char *addr)
 
mimeset_returnpath (const char *addr)
 
mimeset_subject (const char *s)
 
mimeadd_to (const char *addr)
 
mimeadd_cc (const char *addr)
 
mimeadd_bcc (const char *addr)
 
mimeadd_rcpt (const char *addr)
 
mimeadd_header (const char *name, const char *value)
 
mimeset_type (const char *ctype, const char *stype)
 
mimeset_boundary (const char *s)
 
const stringsender (void) const
 
const stringfrom (void) const
 
const stringreplyto (void) const
 
const stringreturnpath (void) const
 
const stringsubject (void) const
 
const std::list< char * > & to_list (void) const
 
const std::list< char * > & cc_list (void) const
 
const std::list< char * > & bcc_list (void) const
 
const std::list< char * > & rcpt_list (void) const
 
const std::list< HEADER * > & header_list (void) const
 
const char * header_value (const char *name) const
 
int header_values (const char *name, std::list< const char * > *values) const
 
const char * get_ctype (void) const
 
const char * get_stype (void) const
 
const mime_headprimary_header (void) const
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

在文件 mime.hpp22 行定义.

构造及析构函数说明

◆ mime()

acl::mime::mime ( void  )

◆ ~mime()

acl::mime::~mime ( void  )

成员函数说明

◆ add_bcc()

mime& acl::mime::add_bcc ( const char *  addr)
inline

添加邮件密送者: BCC: zheng.nosp@m.shux.nosp@m.in@51.nosp@m.iker.nosp@m..com

参数
addr{const char* addr} 邮件地址
返回
{mime&}

在文件 mime.hpp270 行定义.

271  {
272  m_primaryHeader.add_bcc(addr);
273  return *this;
274  }
mime_head & add_bcc(const char *)

引用了 add_bcc().

被这些函数引用 add_bcc().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ add_cc()

mime& acl::mime::add_cc ( const char *  addr)
inline

添加邮件抄送者: CC: zheng.nosp@m.shux.nosp@m.in@51.nosp@m.iker.nosp@m..com

参数
addr{const char* addr} 邮件地址
返回
{mime&}

在文件 mime.hpp259 行定义.

260  {
261  m_primaryHeader.add_cc(addr);
262  return *this;
263  }
mime_head & add_cc(const char *)

引用了 add_cc().

被这些函数引用 add_cc().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ add_header()

mime& acl::mime::add_header ( const char *  name,
const char *  value 
)
inline

添加邮件头的字段

参数
name{const char*} 字段名
value{const char*} 字段值
返回
{mime&}

在文件 mime.hpp293 行定义.

294  {
295  m_primaryHeader.add_header(name, value);
296  return *this;
297  }
HTTP_API void const char * name
Definition: lib_http.h:620
mime_head & add_header(const char *, const char *)

引用了 add_header() , 以及 name.

被这些函数引用 add_header().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ add_rcpt()

mime& acl::mime::add_rcpt ( const char *  addr)
inline

添加邮件接收者: CC: zheng.nosp@m.shux.nosp@m.in@51.nosp@m.iker.nosp@m..com

参数
addr{const char* addr} 邮件地址
返回
{mime&}

在文件 mime.hpp281 行定义.

282  {
283  m_primaryHeader.add_rcpt(addr);
284  return *this;
285  }
mime_head & add_rcpt(const char *)

引用了 add_rcpt().

被这些函数引用 add_rcpt().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ add_to()

mime& acl::mime::add_to ( const char *  addr)
inline

添加邮件接收人: To: zheng.nosp@m.shux.nosp@m.in@51.nosp@m.iker.nosp@m..com

参数
addr{const char*} 邮件地址
返回
{mime&}

在文件 mime.hpp248 行定义.

249  {
250  m_primaryHeader.add_to(addr);
251  return *this;
252  }
mime_head & add_to(const char *)

引用了 add_to().

被这些函数引用 add_to().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ bcc_list()

const std::list<char*>& acl::mime::bcc_list ( void  ) const
inline

获得暗送人列表: To: xxx@x.nosp@m.xx.c.nosp@m.om

返回
{const std::list<char*>&) 如果返回对象的内容为空 (调用 std::list<char*>::empty()) 则表示没有此字段

在文件 mime.hpp397 行定义.

398  {
399  return m_primaryHeader.bcc_list();
400  }
const std::list< char * > & bcc_list(void) const

◆ cc_list()

const std::list<char*>& acl::mime::cc_list ( void  ) const
inline

获得抄送人列表: To: xxx@x.nosp@m.xx.c.nosp@m.om

返回
{const std::list<char*>&) 如果返回对象的内容为空 (调用 std::list<char*>::empty()) 则表示没有此字段

在文件 mime.hpp387 行定义.

388  {
389  return m_primaryHeader.cc_list();
390  }
const std::list< char * > & cc_list(void) const

◆ from()

const string& acl::mime::from ( void  ) const
inline

获得发件人

返回
{const string&} 如果返回对象的内容为空 (调用 string::empty()) 则表示没有此字段

在文件 mime.hpp337 行定义.

338  {
339  return m_primaryHeader.from();
340  }
const string & from(void) const

◆ get_attachments()

const std::list<mime_attach*>& acl::mime::get_attachments ( bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0,
bool  all = true 
)

获得附件列表

参数
enableDecode{bool} 转储时是否自动进行解码
toCharset{const char*} 目标字符集
off{off_t} 调用者希望给邮件结点附加的相对偏移量
all{bool} 提取所有包括 message/application/image 在内的所有节点
返回
{const std::list<mime_attach*>&}

◆ get_body_node()

mime_body* acl::mime::get_body_node ( bool  htmlFirst,
bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0 
)

获得邮件正文节点

参数
htmlFirst{bool} 优先获得HTML格式的文本;否则优先获得 纯文本,且如果只有HTML文本则转换为纯文本
enableDecode{bool} 转储时是否对原文进行解码
toCharset{const char*} 目标字符集
off{off_t} 调用者希望给邮件体结点附加的相对偏移量
返回
{mime_body*} 若未找到正文内容则返回 NULL

◆ get_ctype()

const char* acl::mime::get_ctype ( void  ) const
inline

获得邮件头中关于 Content-Type: text/html 中的 text 字段

返回
{const char*} 永远返回非空值

在文件 mime.hpp447 行定义.

448  {
449  return m_primaryHeader.get_ctype();
450  }
const char * get_ctype(void) const

◆ get_html_body()

mime_body* acl::mime::get_html_body ( bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0 
)

获得 text/html 格式的正文节点

参数
enableDecode{bool} 转储时是否对原文进行解码
toCharset{const char*} 目标字符集
off{off_t} 调用者希望给邮件体结点附加的相对偏移量
返回
{mime_body*} 若未找到 html 格式的正文内容则返回 NULL

◆ get_image()

mime_image* acl::mime::get_image ( const char *  cld,
bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0 
)

◆ get_images()

const std::list<mime_image*>& acl::mime::get_images ( bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0 
)

获得图片列表

参数
enableDecode{bool} 转储时是否自动进行解码
toCharset{const char*} 目标字符集
off{off_t} 调用者希望给邮件结点附加的相对偏移量
返回
{const std::list<mime_image*>&}

◆ get_mime_nodes()

const std::list<mime_node*>& acl::mime::get_mime_nodes ( bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0 
)

获得所有的 mime 节点列表

参数
enableDecode{bool} 转储时是否自动进行解码
toCharset{const char*} 目标字符集
off{off_t} 调用者希望给邮件结点附加的相对偏移量
返回
{const std::list<mime_node*>&}

◆ get_plain_body()

mime_body* acl::mime::get_plain_body ( bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0 
)

获得 text/plain 格式的正文节点

参数
enableDecode{bool} 转储时是否对原文进行解码
toCharset{const char*} 目标字符集
off{off_t} 调用者希望给邮件体结点附加的相对偏移量
返回
{mime_body*} 若未找到 plain 格式的正文内容则返回 NULL

◆ get_stype()

const char* acl::mime::get_stype ( void  ) const
inline

获得邮件头中关于 Content-Type: text/html 中的 html 字段

返回
{const char*} 永远返回非空值

在文件 mime.hpp456 行定义.

457  {
458  return m_primaryHeader.get_stype();
459  }
const char * get_stype(void) const

◆ header_list()

const std::list<HEADER*>& acl::mime::header_list ( void  ) const
inline

获得邮件头的各个字段列表

返回
{const std::list<HEADER*>&)

在文件 mime.hpp417 行定义.

418  {
419  return m_primaryHeader.header_list();
420  }
const std::list< HEADER * > & header_list(void) const

◆ header_value()

const char* acl::mime::header_value ( const char *  name) const
inline

查询邮件头对应字段名的字段值

参数
name{const char*} 字段名
返回
{const char*} 字段值, 为空时表示不存在

在文件 mime.hpp427 行定义.

428  {
429  return m_primaryHeader.header_value(name);
430  }
HTTP_API void const char * name
Definition: lib_http.h:620
const char * header_value(const char *name) const

引用了 name.

◆ header_values()

int acl::mime::header_values ( const char *  name,
std::list< const char * > *  values 
) const
inline

查询邮件头对应字段名的字段值集合

参数
name{const char*} 字段名
values{std::list<const char*>*} 存储对应的结果集
返回
{int} 字段值集合的个数

在文件 mime.hpp438 行定义.

439  {
440  return m_primaryHeader.header_values(name, values);
441  }
HTTP_API void const char * name
Definition: lib_http.h:620
int header_values(const char *name, std::list< const char * > *values) const

引用了 name.

◆ mime_debug()

void acl::mime::mime_debug ( const char *  save_path,
bool  decode = true 
)

调试MIME解析结果

参数
save_path{const char*} 存储 MIME 解析结果的路径
decode{bool} 是否对原文进行解码

◆ parse()

bool acl::mime::parse ( const char *  file_path)

调用此函数解析磁盘上的一封邮件

参数
file_path{const char*} 邮件文件路径
返回
{bool} 如果返回 false 说明源邮件文件无法打开

◆ primary_head_finish()

void acl::mime::primary_head_finish ( void  )

调用者可以手工调用此函数以触发分析邮件头过程

◆ primary_head_ok()

bool acl::mime::primary_head_ok ( void  ) const

调用流式分析时用此函数判断邮件头是否解析完毕

返回
{bool} 是否邮件头解析完毕

◆ primary_header()

const mime_head& acl::mime::primary_header ( void  ) const
inline

获得邮件头

返回
{const mime_head&}

在文件 mime.hpp465 行定义.

466  {
467  return m_primaryHeader;
468  }

◆ rcpt_list()

const std::list<char*>& acl::mime::rcpt_list ( void  ) const
inline

获得收件人列表: To: xxx@x.nosp@m.xx.x.nosp@m.xx, CC: xxx@x.nosp@m.xx.x.nosp@m.xx, BCC: xxx@x.nosp@m.xx.x.nosp@m.xx

返回
{const std::list<char*>&) 如果返回对象的内容为空 (调用 std::list<char*>::empty()) 则表示没有此字段

在文件 mime.hpp408 行定义.

409  {
410  return m_primaryHeader.rcpt_list();
411  }
const std::list< char * > & rcpt_list(void) const

◆ replyto()

const string& acl::mime::replyto ( void  ) const
inline

获得回复邮件地址

返回
{const string&} 如果返回对象的内容为空 (调用 string::empty()) 则表示没有此字段

在文件 mime.hpp347 行定义.

348  {
349  return m_primaryHeader.replyto();
350  }
const string & replyto(void) const

◆ reset()

mime& acl::mime::reset ( void  )

当用同一个MIME解析器对多封邮件解析时, 需要调用此函数清理之前 解析过程中产生的内存, 虽然多次调用该函数无害, 但为了不影响 效率, 最好在利用该解析器解析下一封邮件前调用该函数

◆ returnpath()

const string& acl::mime::returnpath ( void  ) const
inline

获得回复邮件地址

返回
{const string&} 如果返回对象的内容为空 (调用 string::empty()) 则表示没有此字段

在文件 mime.hpp357 行定义.

358  {
359  return m_primaryHeader.returnpath();
360  }
const string & returnpath(void) const

◆ save_as() [1/2]

bool acl::mime::save_as ( ostream out)

将邮件解析结果另存为另一个文件名

参数
out{ostream&} 目标流对象
返回
{bool} 是否成功

◆ save_as() [2/2]

bool acl::mime::save_as ( const char *  file_path)

将邮件解析结果另存为另一个文件中

参数
file_path{const char*} 目标文件名
返回
{bool} 是否成功

◆ save_mail()

bool acl::mime::save_mail ( const char *  path,
const char *  filename,
bool  enableDecode = true,
const char *  toCharset = "gb2312",
off_t  off = 0 
)

邮件解析完毕后,按客户显示的方式将解析结果保存于磁盘, 用户可以使用浏览器打开该 html 页面

参数
path{const char*} 页面保存路径
filename{const char*} 目标文件名
enableDecode{bool} 转储时是否自动进行解码
toCharset{const char*} 目标字符集
off{off_t} 调用者希望给邮件结点附加的相对偏移量
返回
{bool} 是否成功

◆ sender()

const string& acl::mime::sender ( void  ) const
inline

获得发件人

返回
{const string&} 如果返回对象的内容为空 (调用 string::empty()) 则表示没有此字段

在文件 mime.hpp327 行定义.

328  {
329  return m_primaryHeader.sender();
330  }
const string & sender(void) const

◆ set_boundary()

mime& acl::mime::set_boundary ( const char *  s)
inline

设置邮件头部的分隔符

参数
s{const char*} 分隔串
返回
{mime&}

在文件 mime.hpp316 行定义.

317  {
318  m_primaryHeader.set_boundary(s);
319  return *this;
320  }
mime_head & set_boundary(const char *)

引用了 set_boundary().

被这些函数引用 set_boundary().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ set_from()

mime& acl::mime::set_from ( const char *  addr)
inline

设置发件人: From: zheng.nosp@m.shux.nosp@m.in@51.nosp@m.iker.nosp@m..com

参数
addr{const char*} 邮件地址
返回
{mime&}

在文件 mime.hpp204 行定义.

205  {
206  m_primaryHeader.set_from(addr);
207  return *this;
208  }
mime_head & set_from(const char *)

引用了 set_from().

被这些函数引用 set_from().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ set_replyto()

mime& acl::mime::set_replyto ( const char *  addr)
inline

设置邮件回地址: Reply-To: zheng.nosp@m.shux.nosp@m.in@51.nosp@m.iker.nosp@m..com

参数
addr{const char*} 邮件地址
返回
{mime&}

在文件 mime.hpp215 行定义.

216  {
217  m_primaryHeader.set_replyto(addr);
218  return *this;
219  }
mime_head & set_replyto(const char *)

引用了 set_replyto().

被这些函数引用 set_replyto().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ set_returnpath()

mime& acl::mime::set_returnpath ( const char *  addr)
inline

设置邮件反复地址 Return-Path: zheng.nosp@m.shux.nosp@m.in@51.nosp@m.iker.nosp@m..com

参数
addr{const char*} 邮件地址
返回
{mime&}

在文件 mime.hpp226 行定义.

227  {
228  m_primaryHeader.set_returnpath(addr);
229  return *this;
230  }
mime_head & set_returnpath(const char *)

引用了 set_returnpath().

被这些函数引用 set_returnpath() , 以及 set_sender().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ set_sender()

mime& acl::mime::set_sender ( const char *  addr)
inline

设置发件人

参数
addr{const char*} 邮件地址
返回
{mime&}

在文件 mime.hpp193 行定义.

194  {
195  m_primaryHeader.set_returnpath(addr);
196  return *this;
197  }
mime_head & set_returnpath(const char *)

引用了 set_returnpath().

+ 函数调用图:

◆ set_subject()

mime& acl::mime::set_subject ( const char *  s)
inline

设置邮件主题: Subject: test

参数
s{const char*} 邮件主题
返回
{mime&}

在文件 mime.hpp237 行定义.

238  {
239  m_primaryHeader.set_subject(s);
240  return *this;
241  }
mime_head & set_subject(const char *)

引用了 set_subject().

被这些函数引用 set_subject().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ set_type()

mime& acl::mime::set_type ( const char *  ctype,
const char *  stype 
)
inline

设置邮件头的内容类型: Content-Type: text/plain

参数
ctype{const char*} 主类型
stype{const char*} 子类型
返回
{mime&}

在文件 mime.hpp305 行定义.

306  {
307  m_primaryHeader.set_type(ctype, stype);
308  return *this;
309  }
mime_head & set_type(const char *, const char *)

引用了 set_type().

被这些函数引用 set_type().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ subject()

const string& acl::mime::subject ( void  ) const
inline

获得邮件主题

返回
{const string&} 如果返回对象的内容为空 (调用 string::empty()) 则表示没有此字段

在文件 mime.hpp367 行定义.

368  {
369  return m_primaryHeader.subject();
370  }
const string & subject(void) const

◆ to_list()

const std::list<char*>& acl::mime::to_list ( void  ) const
inline

获得收件人列表: To: xxx@x.nosp@m.xx.c.nosp@m.om

返回
{const std::list<char*>&) 如果返回对象的内容为空 (调用 std::list<char*>::empty()) 则表示没有此字段

在文件 mime.hpp377 行定义.

378  {
379  return m_primaryHeader.to_list();
380  }
const std::list< char * > & to_list(void) const

◆ update()

bool acl::mime::update ( const char *  data,
size_t  len 
)

调用此函数进行流式方式解析邮件内容, 如果仅想解析邮件头, 则可以用此 接口解析完邮件头后调用 update_end() 接口即可, 如果想要解析完整的一 封邮件, 则需要不断地调用此函数直到本函数返回 true 表示 multipart 格式 的邮件解析完毕; 如果不是 multipart 格式邮件, 则此函数不可能会回返 true, 调用者需要自行判断邮件的结束位置

参数
data{const char*} 邮件数据(可能是邮件头也可能是邮件体, 并且 不必是完整的数据行)
len{size_t} data 数据长度
返回
{bool} 针对 multipart 邮件, 返回 true 表示该封邮件结束完毕; 对于非 multipart 邮件, 该返回值永远为 false, 没有任何意义, 需要调用 者自己判断邮件的结束位置 注意: 调用完此函数后一定需要调用 update_end 函数通知解析器解析完毕

◆ update_begin()

void acl::mime::update_begin ( const char *  path)

开始进行流式解析过程, 该函数内部会自动调用 reset() 函数以重置解析 器状态

参数
path{const char*} 邮件文件路径名, 如果该参数为空, 则不能 获得邮件体数据, 也不能调用 save_xxx 相关的接口

◆ update_end()

void acl::mime::update_end ( void  )

在采用流式解析结束后必须调用此函数


该类的文档由以下文件生成: