NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
smtp_socket类 参考final

SMTP Socket类 更多...

#include <smtp_socket.hpp>

类 smtp_socket 继承关系图:
[图例]

struct  response
 SMTP服务器响应 更多...
struct  starttls_result
 STARTTLS升级结果 更多...

Public 类型

enum class  auth_method { none , plain , login }
 SMTP认证方式 更多...
enum class  tls_mode { none , implicit , starttls }
 TLS连接模式 更多...
Public 类型 继承自 socket_base
using native_handle_type
 平台原生句柄类型

Public 成员函数

 smtp_socket ()=default
 默认构造函数
 smtp_socket (native_handle_type fd) noexcept
 从原生句柄构造
void connect (const ip_address &addr, const string &domain="localhost", tls_mode mode=tls_mode::none, const ssl_context *ctx=nullptr, const string &sni_hostname="")
 连接SMTP服务器(IP)
void connect (const string &hostname, ports port, const string &domain="localhost", tls_mode mode=tls_mode::none, dns_client *dns=nullptr, const ssl_context *ctx=nullptr, const string &sni_hostname="")
 连接SMTP服务器(域名)
starttls_result starttls (const ssl_context &ctx, const string &sni_hostname="")
 执行STARTTLS升级
void disconnect ()
 断开连接,发送QUIT命令
void authenticate (const string &username, const string &password, auth_method method=auth_method::plain)
 SMTP认证
void send (const smtp_message &msg)
 发送邮件
void noop ()
 发送NOOP命令
NEFORCE_NODISCARD bool is_connected () const noexcept
 是否已连接
NEFORCE_NODISCARD bool is_tls_active () const noexcept
 TLS是否已激活
NEFORCE_NODISCARD bool verify_peer () const
 验证服务器证书
NEFORCE_NODISCARD string cipher_name () const
 获取当前TLS密码套件名
NEFORCE_NODISCARD string tls_version () const
 获取当前TLS版本
Public 成员函数 继承自 ip_socket
 ip_socket ()=default
 默认构造函数
 ip_socket (const native_handle_type fd) noexcept
 从原生句柄构造
 ~ip_socket () override=default
 析构函数
NEFORCE_NODISCARD int address_family () const noexcept
 获取地址族
NEFORCE_NODISCARD bool is_ipv4 () const noexcept
 检查是否为IPv4 socket
NEFORCE_NODISCARD bool is_ipv6 () const noexcept
 检查是否为IPv6 socket
virtual void connect (const ip_address &endpoint)
 连接到远程端点(TCP客户端)
bool close () noexcept override
 关闭socket
Public 成员函数 继承自 socket_base
 socket_base ()
 默认构造函数
 socket_base (const native_handle_type fd) noexcept
 从原生句柄构造
 socket_base (socket_base &&other) noexcept
 移动构造函数
socket_baseoperator= (socket_base &&other) noexcept
 移动赋值运算符
virtual ~socket_base ()
 析构函数
NEFORCE_NODISCARD native_handle_type native_handle () const noexcept
 获取原生句柄
NEFORCE_NODISCARD bool is_open () const noexcept
 检查socket是否已打开
 operator bool () const noexcept
 布尔转换运算符
void open (int family, int type, int protocol)
 打开socket
bool try_open (int family, int type, int protocol) noexcept
 尝试打开socket(不抛出异常)
bool set_nonblocking (bool enable) noexcept
 设置非阻塞模式
bool shutdown_send () noexcept
 关闭发送方向
bool shutdown_receive () noexcept
 关闭接收方向
bool shutdown_both () noexcept
 关闭双向通信
bool set_option (int level, int optname, const void *value, ::socklen_t len) noexcept
 设置socket选项
bool get_option (int level, int optname, void *optval, ::socklen_t *optlen) const noexcept
 获取socket选项
bool set_reuse_address (bool enable=true) noexcept
 设置地址重用(SO_REUSEADDR)
bool set_reuse_port (bool enable=true) noexcept
 设置端口重用(SO_REUSEPORT)
bool set_keep_alive (bool enable=true) noexcept
 设置TCP KeepAlive
bool set_tcp_nodelay (bool enable=true) noexcept
 设置TCP_NODELAY(禁用Nagle算法)
bool set_receive_buffer_size (int size) noexcept
 设置接收缓冲区大小
bool set_send_buffer_size (int size) noexcept
 设置发送缓冲区大小
bool set_send_timeout (milliseconds timeout) noexcept
 设置发送超时时间
bool set_receive_timeout (milliseconds timeout) noexcept
 设置接收超时时间
NEFORCE_NODISCARD optional< ip_addresslocal_endpoint () const
 获取本地端点地址
NEFORCE_NODISCARD optional< ip_addressremote_endpoint () const
 获取远程端点地址
void bind (const ip_address &endpoint)
 绑定socket到本地地址
void listen (int backlog)
 开始监听连接(TCP)
NEFORCE_NODISCARD native_handle_type release () noexcept
 释放socket所有权

额外继承的成员函数

静态 Public 属性 继承自 socket_base
static constexpr native_handle_type invalid_handle
 无效句柄常量
Protected 属性 继承自 ip_socket
int family_ = AF_UNSPEC
 地址族
Protected 属性 继承自 socket_base
native_handle_type fd_ = invalid_handle
 Socket句柄

详细描述

SMTP Socket类

实现SMTP客户端协议,支持完整的邮件发送流程。 支持多种连接方式和认证机制。

主要功能:

  • SMTP服务器连接(支持IP和域名)
  • TLS/SSL加密(隐式TLS、STARTTLS)
  • 认证(PLAIN、LOGIN)
  • 邮件发送(支持收件人、抄送、密送、HTML邮件)
  • EHLO/HELO协议协商
  • DNS解析

使用示例:

// 创建SSL上下文(用于TLS)
ctx.load_verify_locations("ca-bundle.crt");
// 创建SMTP socket
// 连接到QQ邮箱(STARTTLS)
smtp.connect("smtp.qq.com", ports::smtp, "example.com",
// 认证
smtp.authenticate("username@qq.com", "password",
// 构建邮件
msg.from = "sender@qq.com";
msg.to = {"recipient@example.com"};
msg.subject = "Test Email";
msg.body = "Hello, this is a test email!";
msg.is_html = false;
// 发送邮件
smtp.send(msg);
// 断开连接
smtp.disconnect();
void authenticate(const string &username, const string &password, auth_method method=auth_method::plain)
SMTP认证
void disconnect()
断开连接,发送QUIT命令
void send(const smtp_message &msg)
发送邮件
void connect(const ip_address &addr, const string &domain="localhost", tls_mode mode=tls_mode::none, const ssl_context *ctx=nullptr, const string &sni_hostname="")
连接SMTP服务器(IP)
smtp_socket()=default
默认构造函数
@ starttls
STARTTLS(从明文升级到TLS)
SSL/TLS上下文管理类
@ TLS_CLIENT
TLS客户端端
SMTP邮件消息结构
string body
邮件正文
string subject
邮件主题
bool is_html
是否为HTML格式
string from
发件人地址
vector< string > to
收件人地址列表

在文件 smtp_socket.hpp114 行定义.

成员枚举类型说明

◆ auth_method

enum class smtp_socket::auth_method
strong

SMTP认证方式

枚举值
none 

无认证

plain 

PLAIN认证

login 

LOGIN认证

在文件 smtp_socket.hpp120 行定义.

◆ tls_mode

enum class smtp_socket::tls_mode
strong

TLS连接模式

枚举值
none 

明文连接

implicit 

隐式TLS(直接TLS)

starttls 

STARTTLS(从明文升级到TLS)

在文件 smtp_socket.hpp130 行定义.

构造及析构函数说明

◆ smtp_socket()

smtp_socket::smtp_socket ( native_handle_type fd)
inlineexplicitnoexcept

从原生句柄构造

参数
fd原生socket句柄

在文件 smtp_socket.hpp197 行定义.

引用了 ip_socket::ip_socket().

成员函数说明

◆ authenticate()

void smtp_socket::authenticate ( const string & username,
const string & password,
auth_method method = auth_method::plain )

SMTP认证

参数
username用户名
password密码
method认证方式

引用了 plain.

◆ cipher_name()

NEFORCE_NODISCARD string smtp_socket::cipher_name ( ) const
inline

获取当前TLS密码套件名

返回
密码套件名称

在文件 smtp_socket.hpp278 行定义.

◆ connect() [1/2]

void smtp_socket::connect ( const ip_address & addr,
const string & domain = "localhost",
tls_mode mode = tls_mode::none,
const ssl_context * ctx = nullptr,
const string & sni_hostname = "" )

连接SMTP服务器(IP)

参数
addr服务器IP地址
domain本机EHLO域名
modeTLS模式
ctxSSL上下文(mode != none时必须提供)
sni_hostnameSNI主机名(为空则不设置)

引用了 none.

◆ connect() [2/2]

void smtp_socket::connect ( const string & hostname,
ports port,
const string & domain = "localhost",
tls_mode mode = tls_mode::none,
dns_client * dns = nullptr,
const ssl_context * ctx = nullptr,
const string & sni_hostname = "" )

连接SMTP服务器(域名)

参数
hostname服务器域名
port端口号
domainEHLO域名
modeTLS模式
dnsDNS客户端(为nullptr时使用默认配置)
ctxSSL上下文
sni_hostnameSNI主机名(为空则使用hostname)

引用了 none.

◆ is_connected()

NEFORCE_NODISCARD bool smtp_socket::is_connected ( ) const
inlinenoexcept

是否已连接

返回
已连接返回true

在文件 smtp_socket.hpp260 行定义.

引用了 socket_base::is_open().

◆ is_tls_active()

NEFORCE_NODISCARD bool smtp_socket::is_tls_active ( ) const
inlinenoexcept

TLS是否已激活

返回
已激活返回true

在文件 smtp_socket.hpp266 行定义.

◆ send()

void smtp_socket::send ( const smtp_message & msg)

发送邮件

参数
msg邮件消息

◆ starttls()

starttls_result smtp_socket::starttls ( const ssl_context & ctx,
const string & sni_hostname = "" )

执行STARTTLS升级

参数
ctxSSL上下文
sni_hostnameSNI主机名
返回
STARTTLS协商结果

◆ tls_version()

NEFORCE_NODISCARD string smtp_socket::tls_version ( ) const
inline

获取当前TLS版本

返回
TLS版本字符串

在文件 smtp_socket.hpp284 行定义.

◆ verify_peer()

NEFORCE_NODISCARD bool smtp_socket::verify_peer ( ) const
inline

验证服务器证书

返回
验证通过返回true

在文件 smtp_socket.hpp272 行定义.


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