xrtSmtpClientConfigInit

初始化明文 25 端口、localhost EHLO 和有界响应配置。

void xrtSmtpClientConfigInit(xsmtpclientconfig* pConfig);
参数说明
xsmtpclientconfig* pConfig配置结构
返回:初始化明文 25 端口、localhost EHLO 和有界响应配置。

示例已编译验证

smtpclientconfiginit obj;
xrtSmtpClientConfigInit(&obj);

xrtSmtpClientConfigValid

验证网络所有者、EHLO 名称和响应行上限。

bool xrtSmtpClientConfigValid(const xsmtpclientconfig* pConfig);
参数说明
const xsmtpclientconfig* pConfig配置结构
返回:验证网络所有者、EHLO 名称和响应行上限。

示例已编译验证

/* 验证网络所有者、EHLO 名称和响应行上限。 */
result = xrtSmtpClientConfigValid(pConfig);

xrtSmtpClientOpen

建立连接,验证 220 banner 并完成 EHLO/可选 HELO 和 STARTTLS。

xsmtpclient* xrtSmtpClientOpen( const xsmtpclientconfig* pConfig, xdeadline iDeadline, xcancel* pCancel );
参数说明
const xsmtpclientconfig* pConfig配置结构
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:建立连接,验证 220 banner 并完成 EHLO/可选 HELO 和 STARTTLS。

示例已编译验证

/* 建立连接,验证 220 banner 并完成 EHLO/可选 HELO 和 STARTTLS。 */
result = xrtSmtpClientOpen(pConfig, iDeadline, pCancel);

xrtSmtpClientState

返回当前事务或终态。

xsmtpclientstate xrtSmtpClientState(const xsmtpclient* pClient);
参数说明
const xsmtpclient* pClient客户端对象
返回:返回当前事务或终态。

示例已编译验证

/* 返回当前事务或终态。 */
result = xrtSmtpClientState(pClient);

xrtSmtpClientCapabilities

返回最近一次 EHLO 得到的已知能力位集。

uint64 xrtSmtpClientCapabilities(const xsmtpclient* pClient);
参数说明
const xsmtpclient* pClient客户端对象
返回:返回最近一次 EHLO 得到的已知能力位集。

示例已编译验证

/* 返回最近一次 EHLO 得到的已知能力位集。 */
result = xrtSmtpClientCapabilities(pClient);

xrtSmtpClientSizeLimit

返回服务器声明的 SIZE;零表示未声明或未给出上限。

uint64 xrtSmtpClientSizeLimit(const xsmtpclient* pClient);
参数说明
const xsmtpclient* pClient客户端对象
返回:返回服务器声明的 SIZE;零表示未声明或未给出上限。

示例已编译验证

/* 返回服务器声明的 SIZE;零表示未声明或未给出上限。 */
result = xrtSmtpClientSizeLimit(pClient);

xrtSmtpClientSecurity

返回当前会话实际使用的明文或 TLS 传输安全级别。

xmailsecurity xrtSmtpClientSecurity(const xsmtpclient* pClient);
参数说明
const xsmtpclient* pClient客户端对象
返回:返回当前会话实际使用的明文或 TLS 传输安全级别。

示例已编译验证

/* 返回当前会话实际使用的明文或 TLS 传输安全级别。 */
result = xrtSmtpClientSecurity(pClient);

xrtSmtpClientAuthenticated

返回当前会话是否已成功完成 SMTP AUTH。

bool xrtSmtpClientAuthenticated(const xsmtpclient* pClient);
参数说明
const xsmtpclient* pClient客户端对象
返回:返回当前会话是否已成功完成 SMTP AUTH。

示例已编译验证

/* 返回当前会话是否已成功完成 SMTP AUTH。 */
result = xrtSmtpClientAuthenticated(pClient);

xrtSmtpClientLastReply

取得最近一条完整响应的稳定借用摘要。

bool xrtSmtpClientLastReply( const xsmtpclient* pClient, xsmtpreply* pReply );
参数说明
const xsmtpclient* pClient客户端对象
xsmtpreply* pReply回复队列
返回:取得最近一条完整响应的稳定借用摘要。

示例已编译验证

/* 取得最近一条完整响应的稳定借用摘要。 */
result = xrtSmtpClientLastReply(pClient, pReply);

xrtSmtpClientSend

发送一条不含 CRLF 的低层 SMTP 行。

bool xrtSmtpClientSend( xsmtpclient* pClient, xstrview Line, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xstrview LineLne 参数
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:发送一条不含 CRLF 的低层 SMTP 行。

示例已编译验证

/* 发送一条不含 CRLF 的低层 SMTP 行。 */
result = xrtSmtpClientSend(pClient, Line, iDeadline, pCancel);

xrtSmtpClientAuthLine

发送预编码的 SASL 响应行;允许认证协议要求的扩展行长。

bool xrtSmtpClientAuthLine( xsmtpclient* pClient, xstrview Line, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xstrview LineLne 参数
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:发送预编码的 SASL 响应行;允许认证协议要求的扩展行长。

示例已编译验证

/* 发送预编码的 SASL 响应行;允许认证协议要求的扩展行长。 */
result = xrtSmtpClientAuthLine(pClient, Line, iDeadline, pCancel);

xrtSmtpClientReceive

读取并验证一条完整单行或多行响应。

bool xrtSmtpClientReceive( xsmtpclient* pClient, xsmtpreply* pReply, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xsmtpreply* pReply回复队列
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:读取并验证一条完整单行或多行响应。

示例已编译验证

/* 读取并验证一条完整单行或多行响应。 */
result = xrtSmtpClientReceive(pClient, pReply, iDeadline, pCancel);

xrtSmtpClientCommand

构建并发送命令,然后读取完整响应。

bool xrtSmtpClientCommand( xsmtpclient* pClient, xstrview Verb, xstrview Arguments, xsmtpreply* pReply, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xstrview VerbVerb 参数
xstrview Arguments命令参数
xsmtpreply* pReply回复队列
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:构建并发送命令,然后读取完整响应。

示例已编译验证

/* 构建并发送命令,然后读取完整响应。 */
result = xrtSmtpClientCommand(pClient, Verb, Arguments, pReply, iDeadline, pCancel);

xrtSmtpClientMail

开始新 envelope;空 ReversePath 表示标准空反向路径。

bool xrtSmtpClientMail( xsmtpclient* pClient, xstrview ReversePath, xstrview Parameters, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xstrview ReversePathReversePath 参数
xstrview Parameters参数列表
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:开始新 envelope;空 ReversePath 表示标准空反向路径。

示例已编译验证

/* 开始新 envelope;空 ReversePath 表示标准空反向路径。 */
result = xrtSmtpClientMail(pClient, ReversePath, Parameters, iDeadline, pCancel);

xrtSmtpClientRcpt

增加一个收件人;接受 250、251 和 252 响应。

bool xrtSmtpClientRcpt( xsmtpclient* pClient, xstrview ForwardPath, xstrview Parameters, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xstrview ForwardPathForwardPath 参数
xstrview Parameters参数列表
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:增加一个收件人;接受 250、251 和 252 响应。

示例已编译验证

/* 增加一个收件人;接受 250、251 和 252 响应。 */
result = xrtSmtpClientRcpt(pClient, ForwardPath, Parameters, iDeadline, pCancel);

xrtSmtpClientDataBegin

进入 DATA 模式并验证 354 响应。

bool xrtSmtpClientDataBegin( xsmtpclient* pClient, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:进入 DATA 模式并验证 354 响应。

示例已编译验证

/* 进入 DATA 模式并验证 354 响应。 */
result = xrtSmtpClientDataBegin(pClient, iDeadline, pCancel);

xrtSmtpClientDataWrite

发送任意分块边界的消息片段,并跨片段执行 dot transparency。

bool xrtSmtpClientDataWrite( xsmtpclient* pClient, xbytesview Data, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xbytesview Data数据内容
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:发送任意分块边界的消息片段,并跨片段执行 dot transparency。

示例已编译验证

/* 发送任意分块边界的消息片段,并跨片段执行 dot transparency。 */
result = xrtSmtpClientDataWrite(pClient, Data, iDeadline, pCancel);

xrtSmtpClientDataEnd

补足 DATA 终止行、读取最终响应并回到 READY。

bool xrtSmtpClientDataEnd( xsmtpclient* pClient, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:补足 DATA 终止行、读取最终响应并回到 READY。

示例已编译验证

/* 补足 DATA 终止行、读取最终响应并回到 READY。 */
result = xrtSmtpClientDataEnd(pClient, iDeadline, pCancel);

xrtSmtpClientData

直接流式发送完整消息视图,执行 dot transparency 而不复制整份报文。

bool xrtSmtpClientData( xsmtpclient* pClient, xstrview Message, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xstrview Message消息文本
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:直接流式发送完整消息视图,执行 dot transparency 而不复制整份报文。

示例已编译验证

/* 直接流式发送完整消息视图,执行 dot transparency 而不复制整份报文。 */
result = xrtSmtpClientData(pClient, Message, iDeadline, pCancel);

xrtSmtpClientBdatBegin

声明一个 BDAT 块并直接发送命令头;随后必须精确写入 iChunkSize 个字节。

bool xrtSmtpClientBdatBegin( xsmtpclient* pClient, size_t iChunkSize, bool Last, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
size_t iChunkSizeChunkSze 参数
bool Last最后一个
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:声明一个 BDAT 块并直接发送命令头;随后必须精确写入 iChunkSize 个字节。

示例已编译验证

/* 声明一个 BDAT 块并直接发送命令头;随后必须精确写入 iChunkSize 个字节。 */
result = xrtSmtpClientBdatBegin(pClient, iChunkSize, Last, iDeadline, pCancel);

xrtSmtpClientBdatWrite

写入当前 BDAT 块的任意片段;不扫描、不转义且不追加线路分隔符。

bool xrtSmtpClientBdatWrite( xsmtpclient* pClient, xbytesview Data, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xbytesview Data数据内容
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:写入当前 BDAT 块的任意片段;不扫描、不转义且不追加线路分隔符。

示例已编译验证

/* 写入当前 BDAT 块的任意片段;不扫描、不转义且不追加线路分隔符。 */
result = xrtSmtpClientBdatWrite(pClient, Data, iDeadline, pCancel);

xrtSmtpClientBdatEnd

验证块长度、读取 250 响应,并进入下一块或结束当前 envelope。

bool xrtSmtpClientBdatEnd( xsmtpclient* pClient, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:验证块长度、读取 250 响应,并进入下一块或结束当前 envelope。

示例已编译验证

/* 验证块长度、读取 250 响应,并进入下一块或结束当前 envelope。 */
result = xrtSmtpClientBdatEnd(pClient, iDeadline, pCancel);

xrtSmtpClientBdat

零副本发送一个连续 BDAT 块;服务器拒绝后必须 RSET 才能继续。

bool xrtSmtpClientBdat( xsmtpclient* pClient, xbytesview Data, bool Last, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xbytesview Data数据内容
bool Last最后一个
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:零副本发送一个连续 BDAT 块;服务器拒绝后必须 RSET 才能继续。

示例已编译验证

/* 零副本发送一个连续 BDAT 块;服务器拒绝后必须 RSET 才能继续。 */
result = xrtSmtpClientBdat(pClient, Data, Last, iDeadline, pCancel);

xrtSmtpClientReset

取消当前 envelope 并回到 READY。

bool xrtSmtpClientReset( xsmtpclient* pClient, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:取消当前 envelope 并回到 READY。

示例已编译验证

/* 取消当前 envelope 并回到 READY。 */
result = xrtSmtpClientReset(pClient, iDeadline, pCancel);

xrtSmtpClientNoop

验证连接仍可交换命令。

bool xrtSmtpClientNoop( xsmtpclient* pClient, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:验证连接仍可交换命令。

示例已编译验证

/* 验证连接仍可交换命令。 */
result = xrtSmtpClientNoop(pClient, iDeadline, pCancel);

xrtSmtpClientQuit

发送 QUIT、验证 221 并认证关闭传输。

bool xrtSmtpClientQuit( xsmtpclient* pClient, xdeadline iDeadline, xcancel* pCancel );
参数说明
xsmtpclient* pClient客户端对象
xdeadline iDeadline截止时间
xcancel* pCancel取消令牌
返回:发送 QUIT、验证 221 并认证关闭传输。

示例已编译验证

/* 发送 QUIT、验证 221 并认证关闭传输。 */
result = xrtSmtpClientQuit(pClient, iDeadline, pCancel);

xrtSmtpClientClose

不发送 QUIT,直接正常关闭传输。

bool xrtSmtpClientClose( xsmtpclient* pClient, xdeadline iDeadline );
参数说明
xsmtpclient* pClient客户端对象
xdeadline iDeadline截止时间
返回:不发送 QUIT,直接正常关闭传输。

示例已编译验证

/* 不发送 QUIT,直接正常关闭传输。 */
result = xrtSmtpClientClose(pClient, iDeadline);

xrtSmtpClientAbort

立即异常中止连接;重复调用成功,FAILED 状态保留到销毁。

bool xrtSmtpClientAbort(xsmtpclient* pClient);
参数说明
xsmtpclient* pClient客户端对象
返回:立即异常中止连接;重复调用成功,FAILED 状态保留到销毁。

示例已编译验证

/* 立即异常中止连接;重复调用成功,FAILED 状态保留到销毁。 */
result = xrtSmtpClientAbort(pClient);

xrtSmtpClientDestroy

释放客户端;尚未关闭时执行异常中止。

void xrtSmtpClientDestroy(xsmtpclient* pClient);
参数说明
xsmtpclient* pClient客户端对象
返回:释放客户端;尚未关闭时执行异常中止。

示例已编译验证

xrtSmtpClientDestroy(pClient);