acl  3.5.3.0
smtp_client.h
浏览该文件的文档.
1 #ifndef __SMTP_CLIENT_INCLUDE_H__
2 #define __SMTP_CLIENT_INCLUDE_H__
3 
4 /* #include "lib_acl.h" */
5 
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 
10 #ifdef SMTP_LIB
11 # ifndef SMTP_API
12 # define SMTP_API
13 # endif
14 #elif defined(SMTP_DLL) // || defined(_WINDLL)
15 # if defined(SMTP_EXPORTS) || defined(protocol_EXPORTS)
16 # ifndef SMTP_API
17 # define SMTP_API __declspec(dllexport)
18 # endif
19 # elif !defined(SMTP_API)
20 # define SMTP_API __declspec(dllimport)
21 # endif
22 #elif !defined(SMTP_API)
23 # define SMTP_API
24 #endif
25 
26 typedef struct SMTP_CLIENT {
28  int smtp_code;
29  char* buf;
30  int size;
31  unsigned int flag;
32 #define SMTP_FLAG_PIPELINING (1 << 0)
33 #define SMTP_FLAG_AUTH (1 << 1)
34 #define SMTP_FLAG_8BITMIME (1 << 2)
35 #define SMTP_FLAG_DSN (1 << 3)
36 #define SMTP_FLAG_VRFY (1 << 4)
37 #define SMTP_FLAG_ETRN (1 << 5)
38 #define SMTP_FLAG_SIZE (1 << 6)
40 } SMTP_CLIENT;
41 
42 /**
43  * 远程连接 SMTP 服务器
44  * @param addr {const char*} SMTP 服务器地址,格式:domain:port
45  * @param conn_timeout {int} 连接超时时间
46  * @param rw_timeout {int} IO读写超时时间
47  * @param line_limit {int} SMTP 会话过程中每行的最大长度限制
48  * @return {SMTP_CLIENT*} 连接成功返回非空值,否则返回 NULL
49  */
50 SMTP_API SMTP_CLIENT *smtp_open(const char *addr, int conn_timeout,
51  int rw_timeout, int line_limit);
52 
53 /**
54  * 关闭由 smtp_open 打开的 SMTP 连接并释放对象
55  * @param client {SMTP_CLIENT*} SMTP 连接对象
56  */
57 SMTP_API void smtp_close(SMTP_CLIENT *client);
58 
59 /**
60  * 获得 SMTP 服务器的欢迎信息
61  * @param client {SMTP_CLIENT*} SMTP 连接对象
62  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
63  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
64  */
66 
67 /**
68  * 向 SMTP 服务器发送 HELO/EHLO 命令
69  * @param client {SMTP_CLIENT*} SMTP 连接对象
70  * @param name {const char*} 握手信息,一般用域名
71  * @param ehlo {int} 非 0 时使用 EHLO,否则使用 HELO
72  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
73  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
74  */
75 
76 SMTP_API int smtp_greet(SMTP_CLIENT *client, const char* name, int ehlo);
77 
78 /**
79  * 向 SMTP 服务器发送 HELO 命令
80  * @param client {SMTP_CLIENT*} SMTP 连接对象
81  * @param helo {const char*} 握手信息,一般用域名
82  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
83  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
84  */
85 SMTP_API int smtp_helo(SMTP_CLIENT *client, const char *helo);
86 
87 /**
88  * 向 SMTP 服务器发送 EHLO 命令
89  * @param client {SMTP_CLIENT*} SMTP 连接对象
90  * @param ehlo {const char*} 握手信息,一般用域名
91  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
92  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
93  */
94 SMTP_API int smtp_ehlo(SMTP_CLIENT *client, const char *ehlo);
95 
96 /**
97  * 向 SMTP 服务器发送验证信息
98  * @param client {SMTP_CLIENT*} SMTP 连接对象
99  * @param user {const char*} SMTP 邮件账号
100  * @param pass {const char*} SMTP 邮件账号密码
101  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
102  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
103  */
104 SMTP_API int smtp_auth(SMTP_CLIENT *client, const char *user, const char *pass);
105 
106 /**
107  * 向 SMTP 服务器发送 MAIL FROM 命令
108  * @param client {SMTP_CLIENT*} SMTP 连接对象
109  * @param from {const char*} 发送者邮箱
110  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
111  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
112  */
113 SMTP_API int smtp_mail(SMTP_CLIENT *client, const char *from);
114 
115 /**
116  * 向 SMTP 服务器发送 RCPT TO 命令
117  * @param client {SMTP_CLIENT*} SMTP 连接对象
118  * @param to {const char*} 接收者邮箱
119  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
120  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
121  */
122 SMTP_API int smtp_rcpt(SMTP_CLIENT *client, const char *to);
123 
124 /**
125  * 向 SMTP 服务器发送 DATA 命令
126  * @param client {SMTP_CLIENT*} SMTP 连接对象
127  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
128  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
129  */
130 SMTP_API int smtp_data(SMTP_CLIENT *client);
131 
132 /**
133  * 向 SMTP 服务器发送邮件体内容,可以循环调用本函数直至数据发送完毕
134  * @param client {SMTP_CLIENT*} SMTP 连接对象
135  * @param src {const char*} 遵守邮件 MIME 编码格式的邮件体内容
136  * @param len {size_t} src 数据长度
137  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
138  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
139  */
140 SMTP_API int smtp_send(SMTP_CLIENT *client, const char* src, size_t len);
141 
142 /**
143  * 向 SMTP 服务器发送邮件体内容,可以循环调用本函数直至数据发送完毕
144  * @param client {SMTP_CLIENT*} SMTP 连接对象
145  * @param fmt {const char*} 格式字符串
146  * @param ... 变参
147  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
148  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
149  */
150 SMTP_API int smtp_printf(SMTP_CLIENT *client, const char* fmt, ...);
151 
152 /**
153  * 发送完邮件内容后调用本函数告诉 SMTP 服务器邮件数据完毕
154  * @param client {SMTP_CLIENT*} SMTP 连接对象
155  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
156  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
157  */
158 SMTP_API int smtp_data_end(SMTP_CLIENT *client);
159 
160 /**
161  * 向 SMTP 服务器发送指定件路径的邮件文件
162  * @param client {SMTP_CLIENT*} SMTP 连接对象
163  * @param filepath {const char*} 邮件文件路径
164  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
165  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
166  */
167 SMTP_API int smtp_send_file(SMTP_CLIENT *client, const char *filepath);
168 
169 /**
170  * 向 SMTP 服务器发送给定文件流的邮件内容
171  * @param client {SMTP_CLIENT*} SMTP 连接对象
172  * @param in {ACL_VSTREAM*} 邮件文件输入流
173  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
174  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
175  */
177 
178 /**
179  * 向 SMTP 服务器发送退出(QUIT)命令
180  * @param client {SMTP_CLIENT*} SMTP 连接对象
181  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
182  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
183  */
184 SMTP_API int smtp_quit(SMTP_CLIENT *client);
185 
186 /**
187  * 向 SMTP 服务器发送 NOOP 命令
188  * @param client {SMTP_CLIENT*} SMTP 连接对象
189  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
190  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
191  */
192 SMTP_API int smtp_noop(SMTP_CLIENT *client);
193 
194 /**
195  * 向 SMTP 服务器发送 RSET 命令
196  * @param client {SMTP_CLIENT*} SMTP 连接对象
197  * @return {int} 0 表示成功(SMTP_CLIENT::smtp_code 表示返回码,
198  * SMTP_CLIENT::buf 存储响应内容),否则表示出错,应该关闭连接对象
199  */
200 SMTP_API int smtp_rset(SMTP_CLIENT *client);
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 
206 #endif
SMTP_API int smtp_greet(SMTP_CLIENT *client, const char *name, int ehlo)
SMTP_API SMTP_CLIENT * smtp_open(const char *addr, int conn_timeout, int rw_timeout, int line_limit)
SMTP_API int smtp_send_file(SMTP_CLIENT *client, const char *filepath)
HTTP_API void const char * name
Definition: lib_http.h:620
struct SMTP_CLIENT SMTP_CLIENT
unsigned int flag
Definition: smtp_client.h:31
SMTP_API int smtp_printf(SMTP_CLIENT *client, const char *fmt,...)
int message_size_limit
Definition: smtp_client.h:39
SMTP_API int smtp_noop(SMTP_CLIENT *client)
SMTP_API int smtp_auth(SMTP_CLIENT *client, const char *user, const char *pass)
SMTP_API int smtp_get_banner(SMTP_CLIENT *client)
SMTP_API int smtp_send(SMTP_CLIENT *client, const char *src, size_t len)
SMTP_API int smtp_data_end(SMTP_CLIENT *client)
SMTP_API void smtp_close(SMTP_CLIENT *client)
SMTP_API int smtp_data(SMTP_CLIENT *client)
SMTP_API int smtp_ehlo(SMTP_CLIENT *client, const char *ehlo)
SMTP_API int smtp_mail(SMTP_CLIENT *client, const char *from)
ACL_VSTREAM * conn
Definition: smtp_client.h:27
#define SMTP_API
Definition: smtp_client.h:23
SMTP_API int smtp_helo(SMTP_CLIENT *client, const char *helo)
SMTP_API int smtp_send_stream(SMTP_CLIENT *client, ACL_VSTREAM *in)
ACL_API void const char * fmt
Definition: acl_aio.h:771
SMTP_API int smtp_quit(SMTP_CLIENT *client)
SMTP_API int smtp_rset(SMTP_CLIENT *client)
char * buf
Definition: smtp_client.h:29
SMTP_API int smtp_rcpt(SMTP_CLIENT *client, const char *to)