C++发送邮件

来源:互联网 发布:js 杀破狼 百度网盘 编辑:程序博客网 时间:2024/06/05 05:48

        C++ 发送邮件

    在许多应用程序中,都会或多或少地用到邮件发送程序。本文首先介绍发送邮件必须用到的协议SMTP,然后给出用C++写的一个邮件发送类。

    邮件发送要用到邮件服务器和一个邮箱账户,这样你就可以用本文的demo程序进行邮件发送了。

    邮件发送协议用SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,而邮件的接收用POP3协议。

    在邮件发送程序中,我们实际用到的是SMTP命令,如下表格所示:


SMTP 命令命令描述DATA开始信息写作EXPN<string>验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用HELO<domain>向服务器标识用户身份,返回邮件服务器身份HELP<command>查询服务器支持什么命令,返回命令中的信息MAIL FROM<host>在主机上初始化一个邮件会话NOOP无操作,服务器应响应OKQUIT终止邮件会话RCPT TO<user>标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:RSET重置会话,当前传输被取消SAML FROM<host>发送邮件到用户终端和邮箱SEND FROM<host>发送邮件到用户终端SOML FROM<host>发送邮件到用户终端或邮箱TURN接收端和发送端交换角色VRFY<user>用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令

    SMTP工作过程:

    1. 建立与邮件服务器之间的TCP连接。

    2. 客户端发送HELO命令,服务器返回250 ok。

    3. 客户端发送AUTH LOGIN, 传输用户名和密码到服务器,登陆邮件服务器。(注意:一般要求用户名和密码用BASE64加密)

    4. 发送MAIL FROM命令,初始一个邮件会话。

    5. 发送RCPT TO,表明收件人。

    6. 发送DATA,表示开始发送信息。

    7. 发送QUIT,退出。


    在每条命令发送结束,末尾加上\r\n,即<CRLF>,回车键,表示此条命令的结束。

    C++发送源代码详见https://github.com/duankai/mail

           其中,Base64.h是用来对用户名和密码进行加密的,mail.h定义了一些退出代码。如下是GosMail类的定义:

class GosMail{public:static GosMail * GetInstance();int SendMail(USER_INFO_T * pstUserInfo, MAIL_INFO_T * pstMailInfo);bool GetStatus();~GosMail();private:GosMail();bool Init();void GetMailSocket(int iPort = 25);void FreeResource();int InitMailBox();int Login(USER_INFO_T * pstUserInfo);int SendContent(MAIL_INFO_T * pstMailInfo);int QuitEmailBox();public:private:SOCKET           m_socket;SOCKADDR_IN      m_sockAddr;bool             m_mailStatus;static GosMail * m_mailInst;int              m_iSockAddrLen;char             recvBuff[1024];char             sendBuff[1024 * 3];};
     本文介绍的内容用C++实现了一个简单的邮件发送类,将来会将邮件接收类也补充完整,欢迎大家提出意见和指出不足之处。
   






0 0