acl  3.5.3.0
rfc822.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/noncopyable.hpp"
4 #include <list>
5 #include <time.h>
6 
7 #if !defined(ACL_MIME_DISABLE)
8 
9 namespace acl {
10 
11 /**
12  * 邮件地址
13  */
15 {
16  char* addr; // 邮件地址,格式为: xxx@xxx.xxx
17  char* comment; // 邮件备注
18 };
19 
20 typedef enum
21 {
24 } tzone_t;
25 
27 {
28 public:
29  rfc822(void);
30  ~rfc822(void);
31 
32  /**
33  * 解析符合 RFC822 标准的时间格式
34  * @param in {const char*} 时间字符串,如:
35  * Wed, 11 May 2011 09:44:37 +0800 (CST)
36  * Wed, 11 May 2011 16:17:39 GMT
37  */
38  time_t parse_date(const char *in);
39 
40  /**
41  * 生成符合 RFC822 标准的时间格式
42  * @param t {time_t}
43  * @param out {char*} 存储转换结果
44  * @param size {size_t} out 空间大小
45  * @param zone {tzone_t} 所在时区
46  */
47  void mkdate(time_t t, char* out, size_t size, tzone_t zone = tzone_cst);
48 
49  /**
50  * 生成东八区的时间格式
51  * @param t {time_t}
52  * @param out {char*} 存储转换结果
53  * @param size {size_t} out 空间大小
54  */
55  void mkdate_cst(time_t t, char* out, size_t size);
56 
57  /**
58  * 生成格林威治时间的时间格式
59  * @param t {time_t}
60  * @param out {char*} 存储转换结果
61  * @param size {size_t} out 空间大小
62  */
63  void mkdate_gmt(time_t t, char* out, size_t size);
64 
65  /**
66  * 解析邮件地址列表,将符合 RFC822 标准的邮件地址列表解析成
67  * 人能正常看懂的邮件地址列表,同时将用户名注释部分进行
68  * RFC2047解码
69  * @param in {const char*} RFC822 格式的邮件地址列表,如:
70  * "=?gb2312?B?1dSx+A==?= <zhaobing@51iker.com>;\r\n"
71  * "\t\"=?GB2312?B?t+vBosn6?=\" <fenglisheng@51iker.com>;\r\n"
72  * "\t\"zhengshuxin3\";\"zhengshuxin4\" <zhengshuxin2@51iker.com>;"
73  * "<xuganghui@51iker.com>;<wangwenquan@51iker.com>;"
74  * @param to_charset {const char*} 目标字符集,例如:gbk, gb18030, utf-8
75  * @return {const std::list<rfc822_addr*>&} 解析结果
76  */
77  const std::list<rfc822_addr*>& parse_addrs(const char* in,
78  const char* to_charset = "utf-8");
79 
80  /**
81  * 解析一个符合 RFC822 标准的邮件地址,同时将用户名注释部分按
82  * RFC2047 标准进行解码
83  * @param in {const char*} RFC822 格式的邮件地址
84  * @param to_charset {const char*} 目标字符集,例如:gbk, gb18030, utf-8
85  * @return {const rfc822_addr*} 返回 NULL 表明输入的邮件地址不符合
86  * RFC822 规范
87  */
88  const rfc822_addr* parse_addr(const char* in,
89  const char* to_charset = "utf-8");
90 
91  /**
92  * 检查邮件地址是否合法
93  * @param in {const char*} RFC822 格式的邮件地址
94  * @return {bool}
95  */
96  bool check_addr(const char* in);
97 
98 private:
99  std::list<rfc822_addr*> addrs_;
100 
101  void reset(void);
102 };
103 
104 } // namespace acl
105 
106 #endif // !defined(ACL_MIME_DISABLE)
tzone_t
Definition: rfc822.hpp:20
char * comment
Definition: rfc822.hpp:17
#define ACL_CPP_API