acl  3.5.3.0
mail_attach.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/string.hpp"
4 
5 #if !defined(ACL_MIME_DISABLE)
6 
7 namespace acl {
8 
9 class mime_code;
10 class ostream;
11 
12 /**
13  * 撰写邮件时,此类用于创建与邮件附件相关的功能
14  */
16 {
17 public:
18  /**
19  * 将一个普通文件打包进邮件时的构造函数
20  * @param filepath {const char*} 附件文件存储路径(含文件名)
21  * @param content_type {const char*} 附件文件类型
22  * @param charset {const char*} 若为纯文件,此参数表明纯文本的字符集
23  */
24  mail_attach(const char* filepath, const char* content_type,
25  const char* charset);
26  ~mail_attach();
27 
28  /**
29  * 设置附件的文件名,内部会自动对文件名用 rfc2047 格式进行编码
30  * @param name {const char*} 非空字符串
31  * @param charset {const char*} 该参数指定字符集,当非 NULL 时,则内
32  * 部自动使用 rfc2047 格式对文件名进行编码,否则内部直接存储输入名称
33  * @return {mail_attach&}
34  */
35  mail_attach& set_filename(const char* name, const char* charset = NULL);
36 
37  /**
38  * 当邮件中的数据体为 multipart/relative 类型时,调用此函数设置其中的
39  * html 正文中 cid 标识符
40  * @param id {const char*} cid 标识符
41  * @return {mail_attach&}
42  */
43  mail_attach& set_content_id(const char* id);
44 
45  /**
46  * 获得构造函数传入的附件文件路径
47  * @return {const char*}
48  */
49  const char* get_filepath() const
50  {
51  return filepath_.c_str();
52  }
53 
54  /**
55  * 获得附件的文件名部分经 rfc2047 编码后名称
56  * @return {const char*}
57  */
58  const char* get_filename() const
59  {
60  return filename_.c_str();
61  }
62 
63  /**
64  * 获得构造函数传入的文件类型
65  * @return {const char*}
66  */
67  const char* get_content_type() const
68  {
69  return ctype_.c_str();
70  }
71 
72  /**
73  * 获得由 set_content_id 设置的该附件的 cid 标识符
74  * @return {const char*}
75  */
76  const char* get_content_id() const
77  {
78  return cid_.c_str();
79  }
80 
81  /**
82  * 将附件内容采用传入的编码器进行编码后存入内存缓冲区
83  * @param coder {mime_code*} 编码器(base64/qp等)
84  * @param out {string&} 存储结果,采用 append 方式
85  * @return {bool} 编码过程是否成功
86  */
87  bool save_to(mime_code* coder, string& out);
88 
89  /**
90  * 将附件内容采用传入的编码器进行编码后存入输出流中
91  * @param coder {mime_code*} 编码器(base64/qp等)
92  * @param out {out&} 存储结果
93  * @return {bool} 编码过程是否成功
94  */
95  bool save_to(mime_code* coder, ostream& out);
96 
97  /**
98  * 创建该附件在 MIME 邮件中的文件头信息
99  * @param transfer_encoding {const char*} 编码方式
100  * @param out {string&} 存储结果,采用 append 方式
101  */
102  void build_header(const char* transfer_encoding, string& out);
103 
104 private:
105  string filepath_;
106  string filename_;
107  string ctype_;
108  string cid_;
109  string charset_;
110 
111  bool rfc2047_encode(const char* name, const char* charset, string& out);
112 };
113 
114 } // namespace acl
115 
116 #endif // !defined(ACL_MIME_DISABLE)
HTTP_API void const char * name
Definition: lib_http.h:620
const char * get_filepath() const
Definition: mail_attach.hpp:49
const char * get_filename() const
Definition: mail_attach.hpp:58
const char * get_content_id() const
Definition: mail_attach.hpp:76
#define ACL_CPP_API
const char * get_content_type() const
Definition: mail_attach.hpp:67