C++发送邮件
??????? C++ 發送郵件
??? 在許多應用程序中,都會或多或少地用到郵件發送程序。本文首先介紹發送郵件必須用到的協議SMTP,然后給出用C++寫的一個郵件發送類。
??? 郵件發送要用到郵件服務器和一個郵箱賬戶,這樣你就可以用本文的demo程序進行郵件發送了。
??? 郵件發送協議用SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,而郵件的接收用POP3協議。
??? 在郵件發送程序中,我們實際用到的是SMTP命令,如下表格所示:
| 命令 | 描述 |
| DATA | 開始信息寫作 |
| EXPN<string> | 驗證給定的郵箱列表是否存在,擴充郵箱列表,也常被禁用 |
| HELO<domain> | 向服務器標識用戶身份,返回郵件服務器身份 |
| HELP<command> | 查詢服務器支持什么命令,返回命令中的信息 |
| MAIL FROM<host> | 在主機上初始化一個郵件會話 |
| NOOP | 無操作,服務器應響應OK |
| QUIT | 終止郵件會話 |
| 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++實現了一個簡單的郵件發送類,將來會將郵件接收類也補充完整,歡迎大家提出意見和指出不足之處。
???
總結
- 上一篇: Hi3516A开发--mpp业务分析
- 下一篇: CDH5.16.2下载安装