acl  3.5.3.0
acl::smtp_client类 参考

#include <smtp_client.hpp>

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

Public 成员函数

 smtp_client (const char *addr, int conn_timeout=60, int rw_timeout=60)
 
 ~smtp_client ()
 
bool send (const mail_message &message, const char *email=NULL)
 
bool send_envelope (const mail_message &message)
 
smtp_clientset_ssl (sslbase_conf *ssl_conf)
 
int get_code () const
 
const char * get_status () const
 
bool write (const char *data, size_t len)
 
bool format (const char *fmt,...)
 
bool vformat (const char *fmt, va_list ap)
 
bool open ()
 
void close ()
 
bool get_banner ()
 
bool greet ()
 
bool auth_login (const char *user, const char *pass)
 
bool mail_from (const char *from)
 
bool rcpt_to (const char *to)
 
bool data_begin ()
 
bool send_email (const char *filepath)
 
bool data_end ()
 
bool quit ()
 
bool noop ()
 
bool reset ()
 
socket_streamget_stream (void)
 

额外继承的成员函数

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

详细描述

SMTP 邮件发送客户端类,可以使用此类对象发送邮件,支持身份认证等功能

在文件 smtp_client.hpp20 行定义.

构造及析构函数说明

◆ smtp_client()

acl::smtp_client::smtp_client ( const char *  addr,
int  conn_timeout = 60,
int  rw_timeout = 60 
)

构造函数

参数
addr{const char*} SMTP 邮件服务器地址,格式:IP:PORT 或 domain:port
conn_timeout{int} 连接服务器的超时时间(秒)
rw_timeout{int} 网络 IO 超时时间(秒)

◆ ~smtp_client()

acl::smtp_client::~smtp_client ( )

成员函数说明

◆ auth_login()

bool acl::smtp_client::auth_login ( const char *  user,
const char *  pass 
)

调用 gree 成功后调用本函数向 SMTP 服务端发送身份认证命令

参数
user{const char*} 用户账号,非空字符串
pass{const char*} 用户账号密码,非空字符串
返回
{bool} 是否成功

◆ close()

void acl::smtp_client::close ( )

主动关闭与 SMTP 服务端的连接

◆ data_begin()

bool acl::smtp_client::data_begin ( )

调用 rcpt_to 或 send_envelope 成功调用本函数向 SMTP 服务端 DATA 命令,表明开始发送邮件数据

返回
{bool} 命令操作是否成功 注:在调用本函数前,必须保证 SMTP 信封已经成功发送

◆ data_end()

bool acl::smtp_client::data_end ( )

邮件发送完毕(如调用:send_email)后,最后必须调用本函数告诉 SMTP 邮件服务器发送数据结束

返回
{bool} 命令操作是否成功

◆ format()

bool acl::smtp_client::format ( const char *  fmt,
  ... 
)

发送邮件体数据,可以循环调用本函数,但数据内容必须是严格的邮件格式

参数
fmt{const char*} 变参格式
返回
{bool} 命令操作是否成功 注:在第一次调用本函数前,必须保证 SMTP 信封已经成功发送

◆ get_banner()

bool acl::smtp_client::get_banner ( )

第一次连接成功后需要调用本函数获得 SMTP 服务端的欢迎信息

返回
{bool} 是否成功

◆ get_code()

int acl::smtp_client::get_code ( ) const

获得上次 SMTP 交互过程服务端返回的状态码

返回
{int}

◆ get_status()

const char* acl::smtp_client::get_status ( ) const

获得上次 SMTP 交互过程服务端返回的状态信息

返回
{const char*}

◆ get_stream()

socket_stream& acl::smtp_client::get_stream ( void  )
inline

获得与 SMTP 服务器之间的连接流对象,该函数只有当 open 成功后才可调用

返回
{socket_stream&}

在文件 smtp_client.hpp204 行定义.

205  {
206  return stream_;
207  }

◆ greet()

bool acl::smtp_client::greet ( )

调用 get_banner 成功后调用本函数向 SMTP 服务端发送 HELO/HELO 命令

返回
{bool} 是否成功

◆ mail_from()

bool acl::smtp_client::mail_from ( const char *  from)

调用 auth_login 成功后(如果无身份验证,则可以在 greet 成功后) 调用本函数向 SMTP 服务器发送 MAIL FROM 命令

参数
from{const char*} 发件人的邮箱地址
返回
{bool} 是否成功

◆ noop()

bool acl::smtp_client::noop ( )

NOOP 命令

返回
{bool} 命令操作是否成功

◆ open()

bool acl::smtp_client::open ( )

连接远程 SMTP 服务器

返回
{bool} 连接是否成功,若想使用 SSL 方式,则需要在类对象 初始化后调用 set_ssl 设置 SSL 通信方式

◆ quit()

bool acl::smtp_client::quit ( )

断开与邮件服务器的连接

返回
{bool} 命令操作是否成功

◆ rcpt_to()

bool acl::smtp_client::rcpt_to ( const char *  to)

调用 mail_from 成功后调用本函数向 SMTP 服务端发送 RCPT TO 命令, 指明一个收件人,可以多次本函数将邮件发送至多个收件人

参数
to{const char*} 收件人邮箱地址
返回
{bool} 是否成功

◆ reset()

bool acl::smtp_client::reset ( )

重置与邮件服务器的连接状态

返回
{bool} 命令操作是否成功

◆ send()

bool acl::smtp_client::send ( const mail_message message,
const char *  email = NULL 
)

调用本函数发送邮件数据至邮件服务端,该函数会首先调用 send_envelop 发送信封,当 email 或 message.get_email() 非空时,则会调用发送邮件 过程;否则(即 email 和 message.get_email() 均为 NULL)则只发送 信封

参数
message{const mail_messsage&} 邮件相关信息,必须提前构建好
email{const char*} 非空时,优先使用此文件做为邮件体数据发送
返回
{bool} 发送是否成功 注:如果 email 为 NULL 同时 messsage.get_email() 也为 NULL,则本 函数仅发送 SMTP 信封部分,用户还需要调用: data_begin-->write|format|vformat|send_file-->data_end 过程来发送邮件数据体

◆ send_email()

bool acl::smtp_client::send_email ( const char *  filepath)

调用 data_begin 成功调用本函数向 SMTP 服务端发送一封完整的邮件, 需要给出邮件存储于磁盘上的路径

参数
filepath{const char*} 邮件文件路径
返回
{bool} 命令操作是否成功 注:在调用本函数前,必须保证 SMTP 信封已经成功发送

◆ send_envelope()

bool acl::smtp_client::send_envelope ( const mail_message message)

在 SMTP 会话阶段仅发送邮件信封部分数据,应用调用此函数成功后, 还需要调用: 1、data_begin:开始发送邮件体指令 2、write/format/vformat/send_file:发送邮件数据 3、data_end:表示发送邮件体数据完毕

参数
message{const mail_message&} 发送邮件所构建的邮件消息对象
返回
{bool} 是否成功 注:本函数是 open/auth_login/mail_from/rcpt_to 发送信封过程的组合

◆ set_ssl()

smtp_client& acl::smtp_client::set_ssl ( sslbase_conf ssl_conf)

设置 SSL 数据传输模式

参数
ssl_conf{sslbase_conf*} 非空时,指定采用 SSL 传输模式
返回
{smtp_client&}

◆ vformat()

bool acl::smtp_client::vformat ( const char *  fmt,
va_list  ap 
)

发送邮件体数据,可以循环调用本函数,但数据内容必须是严格的邮件格式

参数
fmt{const char*} 变参格式
ap{va_list}
返回
{bool} 命令操作是否成功 注:在第一次调用本函数前,必须保证 SMTP 信封已经成功发送

◆ write()

bool acl::smtp_client::write ( const char *  data,
size_t  len 
)

发送邮件体数据,可以循环调用本函数,但数据内容必须是严格的邮件格式

参数
data{const char*} 邮件内容
len{size_t} data 邮件数据长度
返回
{bool} 命令操作是否成功 注:在第一次调用本函数前,必须保证 SMTP 信封已经成功发送

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