acl/lib_acl_cpp/include/acl_cpp/mime/mime_body.hpp
2014-11-19 00:25:21 +08:00

122 lines
3.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "acl_cpp/acl_cpp_define.hpp"
#include "acl_cpp/mime/mime_node.hpp"
struct MIME_NODE;
namespace acl {
class pipe_manager;
class ostream;
class pipe_string;
class string;
class ACL_CPP_API mime_body : public mime_node
{
public:
/**
* 构造函数
* @param emailFile {const char*} 存储邮件内容的源文件,可以
* 为空,但当为空时在调用 save_body 函数时,则不能指定源文件
* @param node {const MIME_NODE*} 邮件中的某个结点对象
* @param htmlFirst {bool} 是否在提取内容时优先提取 HTML 数据
* @param enableDecode {bool} 当邮件内容为 base64/qp 等编译格式
* 时是否需要自动进行解码
* @param toCharset {const char*} 缺省的目标字符集,如果目标
* 字符集与源字符集不同,则进行字符集转换
* @param off {off_t} 邮件内容在整个数据中的起始位置中附加的
* 相对偏移量,以便于用户可以在邮件内容前面加自己的私有数据
*/
mime_body(const char* emailFile, const MIME_NODE* node,
bool htmlFirst = true, bool enableDecode = true,
const char* toCharset = "gb2312", off_t off = 0)
: mime_node(emailFile, node, enableDecode, toCharset, off)
, m_htmlFirst(htmlFirst)
{
}
~mime_body() {}
/**
* 设置是否仅提取 HTML 数据, 如果为 true 则优先提取 HTML 数据,
* 当不存在 HTML 数据时才会提取纯文本数据; 如果为 false 则优先
* 提取纯文本数据, 如果仅有 HTML 数据时则会从该 HTML 数据中抽
* 取出纯文本数据
* @param htmlFirst {bool}
*/
void set_status(bool htmlFirst)
{
m_htmlFirst = htmlFirst;
}
/**
* 转储邮件正文内容于管道流中
* @param out {pipe_manager&} 管道流管理器
* @param src {const char*} 邮件内容的起始地址,如果为空指针,
* 则从构造函数中所提供的 emailFile 的文件中提取邮件内容
* @param len {int} 邮件内容的数据长度如果为0则从构造
* 函数中所提供的 emailFile 的文件中提取邮件内容
* @return {bool} 是否成功
*/
bool save_body(pipe_manager& out, const char* src = NULL,
int len = 0);
/**
* 转储邮件正文内容于输出流中
* @param out {ostream&} 输出流
* @param src {const char*} 邮件内容的起始地址,如果为空指针,
* 则从构造函数中所提供的 emailFile 的文件中提取邮件内容
* @param len {int} 邮件内容的数据长度如果为0则从构造
* 函数中所提供的 emailFile 的文件中提取邮件内容
* @return {bool} 是否成功
*/
bool save_body(ostream& out, const char* src = NULL,
int len = 0);
/**
* 转储邮件正文内容于目标文件中
* @param file_path {const char*} 目标文件名
* @param src {const char*} 邮件内容的起始地址,如果为空指针,
* 则从构造函数中所提供的 emailFile 的文件中提取邮件内容
* @param len {int} 邮件内容的数据长度如果为0则从构造
* 函数中所提供的 emailFile 的文件中提取邮件内容
* @return {bool} 是否成功
*/
bool save_body(const char* file_path, const char* src = NULL,
int len = 0);
/**
* 转储邮件正文内容于管道缓冲区内
* @param out {pipe_string&} 管道缓冲区
* @param src {const char*} 邮件内容的起始地址,如果为空指针,
* 则从构造函数中所提供的 emailFile 的文件中提取邮件内容
* @param len {int} 邮件内容的数据长度如果为0则从构造
* 函数中所提供的 emailFile 的文件中提取邮件内容
* @return {bool} 是否成功
*/
bool save_body(pipe_string& out, const char* src = NULL,
int len = 0);
/**
* 转储邮件正文内容于缓冲区中
* @param out {string&} 缓冲区
* @param src {const char*} 邮件内容的起始地址,如果为空指针,
* 则从构造函数中所提供的 emailFile 的文件中提取邮件内容
* @param len {int} 邮件内容的数据长度如果为0则从构造
* 函数中所提供的 emailFile 的文件中提取邮件内容
* @return {bool} 是否成功
*/
bool save_body(string& out, const char* src = NULL,
int len = 0);
/**
* 判断结点头部类型中的从类型是否 MIME_STYPE_HTML 类型
* @return {bool}
*/
bool html_stype() const;
private:
bool m_htmlFirst;
};
} // namespace acl