`
jimmy.shine
  • 浏览: 395061 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

POP3协议封装类

    博客分类:
  • Mail
阅读更多
目前互连网上,EMAIL的使用是越来越广泛了。在所有的TCP连接线路中,大概有一半的线路是用来收发EMAIL的。因此,许多网络应用程序要想离开POP3协议是不可能的。
  而且,很多EMAIL系统都是使用SMTP协议来作为发送协议,而POP3协议来作为接受协议。关于这2个协议的许多资料,你可以看一下RCF821(关于SMTP的)和RCF1225(关于POP3的)。虽然在WINDOWS操作系统中,有一个叫MAPI应用程序是来管理EMAIL的,但是它的功能还不够强大,不足以直接处理一些EMAIL服务。所以,我写了一个有关于POP3协议的C++类,在这个类中我还使用了CSocket作为一个类成员(这好象有点不可想象),这样的话呢,我们可以在连接的时候使用它。并且,该POP类使用的一些功能类似于POP3协议中的一些命令。下面就代码:
c 代码
  1. /*--------------------------------------------------------------------   
  2. Pop.h:mainheaderfileforthePOPapplication   
  3. -----------------------------------------------------------------------*/    
  4. #if!defined(AFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_)    
  5. #defineAFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_    
  6. #defineCONNECTION_CHECK0    
  7. #defineUSER_CHECK1    
  8. #definePASSWORD_CHECK2    
  9. #defineQUIT_CHECK3    
  10. #defineDELETE_CHECK4    
  11. #defineRSET_CHECK5    
  12. #defineSTAT_CHECK6    
  13. #defineNOOP_CHECK7    
  14. #defineLIST_CHECK8    
  15. #defineRETR_CHECK9    
  16. /////////////////////////////////////////////////////////////////////////////    
  17. classCPop    
  18. {    
  19. public:    
  20. BOOLList();    
  21. CWordArraym_SizeOfMsg;    
  22. CStringGetErrorMessage();//Ifthereisanyerrorthiswillreturnitmethod    
  23. CStringGetPassword();//GettingPasswordstoredinclass    
  24. voidSetPassword(CString&Password);//SettingPasswordinclass    
  25. CStringGetUser();//Gettingusernamestoredinclass    
  26. voidSetUser(CString&User);//Settingusernameinclass    
  27. CStringGetHost();//GettingHostname(emailservername)storedinclass    
  28. voidSetHost(CString&Host);//SettingHostname(emailservername)inclass    
  29. BOOLConnect();//Connectingtoemailserver    
  30. intGetTotalMailSize();//itreturnstheTotalMailSize    
  31. intGetNumberOfMails();//Itreturnthenumberofmails    
  32. CStringGetMsgContents();    
  33. BOOLStatistics();//issuetheSTATcommandonemailserver    
  34. BOOLRetrieve(intMsgNumber);//Gettinganyparticularmailmessage    
  35. BOOLReset();//issuetheresetcommandonemailserver    
  36. intGetMessageSize(intMsgNumber);//Returnasizeofanyparticularmail    
  37. BOOLNoop();//issuetheNOOPcommandonemailserver    
  38. BOOLDisconnect();//issuetheQUITcommandonemailserver    
  39. BOOLDelete(int&MsgNumber);//Deleteingaparticularmessagefromemailserver    
  40. BOOLConnect(CString&Host,CString&User,CString&Password);    
  41. CPop();    
  42. virtual~CPop();    
  43. private:    
  44. CStringm_ErrorMessage;    
  45. BOOLCheckResponse(intResponseType);    
  46. CStringm_Password;    
  47. CStringm_User;    
  48. CStringm_Host;    
  49. CStringm_MsgContents;    
  50. intm_TotalSize;    
  51. intm_NumberMail;    
  52. CSocketm_PopServer;    
  53. };    
  54. /#endif//!defined(AFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_)    
  55.   
  56. /*-----------------------------------------------------------------------------------------------   
  57. //Pop.cpp:Definestheclassbehaviorsfortheapplication.   
  58. ---------------------------------------------------------------------------------------------------*/    
  59. #include"stdafx.h"    
  60. #include"Pop.h"    
  61. #ifdef_DEBUG    
  62. #definenewDEBUG_NEW    
  63. #undefTHIS_FILE    
  64. staticcharTHIS_FILE[]=__FILE__;    
  65. #endif    
  66. ////////////////////////////////////////////////////////////////////    
  67. //CPopClass    
  68. //////////////////////////////////////////////////////////////////////    
  69. //////////////////////////////////////////////////////////////////////    
  70. //Construction/Destruction    
  71. //////////////////////////////////////////////////////////////////////    
  72. CPop::CPop()    
  73. {    
  74. m_PopServer.Create();    
  75. }    
  76. //{4EEC1C91-6BE1-11d1-8824-00001C302581}    
  77. CPop::~CPop()    
  78. {    
  79. m_PopServer.Close();    
  80. }    
  81. BOOLCPop::Connect(CString&Host,CString&User,CString&Password)    
  82. {    
  83. charbuf[512];    
  84. if(!m_PopServer.Connect(Host,110))//110Pop3Port    
  85. {    
  86. m_ErrorMessage=_T("Servercannotbeconnected");    
  87. returnFALSE;    
  88. }    
  89. else    
  90. {    
  91. if(CheckResponse(CONNECTION_CHECK)==FALSE)    
  92. returnFALSE;    
  93. wsprintf(buf,"USER%s\r\n",(LPCSTR)User);    
  94. m_PopServer.Send(buf,strlen(buf));    
  95. if(CheckResponse(USER_CHECK)==FALSE)    
  96. returnFALSE;    
  97. wsprintf(buf,"PASS%s\r\n",(LPCSTR)Password);    
  98. m_PopServer.Send(buf,strlen(buf));    
  99. if(CheckResponse(PASSWORD_CHECK)==FALSE)    
  100. returnFALSE;    
  101. returnTRUE;    
  102. }    
  103. }    
  104. BOOLCPop::Delete(int&MsgNumber)    
  105. {    
  106. charbuf[512];    
  107. wsprintf(buf,"DELE%d\r\n",MsgNumber);    
  108. m_PopServer.Send(buf,strlen(buf));    
  109. if(CheckResponse(DELETE_CHECK)==FALSE)    
  110. returnFALSE;    
  111. else    
  112. returnTRUE;    
  113. }    
  114. BOOLCPop::Disconnect()    
  115. {    
  116. charbuf[512];    
  117. wsprintf(buf,"QUIT\r\n");    
  118. m_PopServer.Send(buf,strlen(buf));    
  119. if(CheckResponse(QUIT_CHECK)==FALSE)    
  120. returnFALSE;    
  121. else    
  122. returnTRUE;    
  123. }    
  124. BOOLCPop::Noop()    
  125. {    
  126. charbuf[512];    
  127. wsprintf(buf,"NOOP\r\n");    
  128. m_PopServer.Send(buf,strlen(buf));    
  129. if(CheckResponse(NOOP_CHECK)==FALSE)    
  130. returnFALSE;    
  131. else    
  132. returnTRUE;    
  133. }    
  134. //ReturntheMsgSizeforgivenmsgnumber    
  135. intCPop::GetMessageSize(intMsgNumber)    
  136. {    
  137. if(m_SizeOfMsg.GetSize()<MsgNumber+1)    
  138. return0;    
  139. else    
  140. returnm_SizeOfMsg[MsgNumber+1];    
  141. }    
  142. BOOLCPop::Reset()    
  143. {    
  144. charbuf[512];    
  145. wsprintf(buf,"RSET\r\n");    
  146. m_PopServer.Send(buf,strlen(buf));    
  147. if(CheckResponse(RSET_CHECK)==FALSE)    
  148. returnFALSE;    
  149. else    
  150. returnTRUE;    
  151. }    
  152. //MsgContentswillholdthemsgbody    
  153. BOOLCPop::Retrieve(intMsgNumber)    
  154. {    
  155. charbuf[512];    
  156. wsprintf(buf,"RETR%d\r\n",MsgNumber);    
  157. m_PopServer.Send(buf,strlen(buf));    
  158. if(CheckResponse(RETR_CHECK)==FALSE)    
  159. returnFALSE;    
  160. else    
  161. returnTRUE;    
  162. }    
  163. BOOLCPop::Statistics()    
  164. {    
  165. charbuf[512];    
  166. wsprintf(buf,"STAT\r\n");    
  167. m_PopServer.Send(buf,strlen(buf));    
  168. if(CheckResponse(STAT_CHECK)==FALSE)    
  169. returnFALSE;    
  170. else    
  171. returnTRUE;    
  172. }    
  173. CStringCPop::GetMsgContents()    
  174. {    
  175. returnm_MsgContents;    
  176. }    
  177. intCPop::GetNumberOfMails()    
  178. {    
  179. returnm_NumberMail;    
  180. }    
  181. intCPop::GetTotalMailSize()    
  182. {    
  183. returnm_TotalSize;    
  184. }    
  185. BOOLCPop::Connect()    
  186. {    
  187. Connect(m_Host,m_User,m_Password);    
  188. returnTRUE;    
  189. }    
  190. voidCPop::SetHost(CString&Host)    
  191. {    
  192. m_Host=Host;    
  193. }    
  194. CStringCPop::GetHost()    
  195. {    
  196. returnm_Host;    
  197. }    
  198. voidCPop::SetUser(CString&User)    
  199. {    
  200. m_User=User;    
  201. }    
  202. CStringCPop::GetUser()    
  203. {    
  204. returnm_User;    
  205. }    
  206. voidCPop::SetPassword(CString&Password)    
  207. {    
  208. m_Password=Password;    
  209. }    
  210. CStringCPop::GetPassword()    
  211. {    
  212. returnm_Password;    
  213. }    
  214. BOOLCPop::CheckResponse(intResponseType)    
  215. {    
  216. charbuf[1000];    
  217. for(inti=0;i<512;i++)    
  218. buf[i]=’\0’;    
  219. m_PopServer.Receive(buf,sizeof(buf));    
  220. switch(ResponseType)    
  221. {    
  222. caseCONNECTION_CHECK:    
  223. if(strnicmp(buf,"-ERR",4)==0)    
  224.     
  225. m_ErrorMessage=_T("BadConnection");    
  226. returnFALSE;    
  227. }    
  228. break;    
  229. caseUSER_CHECK:    
  230. if(strnicmp(buf,"-ERR",4)==0)    
  231. {    
  232. m_ErrorMessage=_T("BadUserName");    
  233. returnFALSE;    
  234. }    
  235. break;    
  236. casePASSWORD_CHECK:    
  237. if(strnicmp(buf,"-ERR",4)==0)    
  238. {    
  239. m_ErrorMessage=_T("BadPasswordName");    
  240. returnFALSE;    
  241. }    
  242. break;    
  243. caseQUIT_CHECK:    
  244. if(strnicmp(buf,"-ERR",4)==0)    
  245. {    
  246. m_ErrorMessage=_T("ErroroccuredduringQUIT");    
  247. returnFALSE;    
  248. }    
  249. break;    
  250. caseDELETE_CHECK:    
  251. if(strnicmp(buf,"-ERR",4)==0)    
  252. {    
  253. m_ErrorMessage=_T("ErroroccuredduringDELE");    
  254. returnFALSE;    
  255. }    
  256. break;    
  257. caseRSET_CHECK:    
  258. if(strnicmp(buf,"-ERR",4)==0)    
  259. {    
  260. m_ErrorMessage=_T("ErroroccuredduringRSET");    
  261. returnFALSE;    
  262. }    
  263. break;    
  264. caseSTAT_CHECK:    
  265. if(strnicmp(buf,"-ERR",4)==0)    
  266. {    
  267. m_ErrorMessage=_T("ErroroccuredduringSTAT");    
  268. returnFALSE;    
  269. }    
  270. else    
  271. {    
  272. BOOLEmailNumber=TRUE;    
  273. forchar*p=buf;*p!=’\0’;p++)    
  274. {    
  275. if(*p==’\t’||*p==’’)    
  276. {    
  277. if(EmailNumber==TRUE)    
  278. {    
  279. m_NumberMail=atoi(p);    
  280. EmailNumber=FALSE;    
  281. }    
  282. else    
  283. {    
  284. m_TotalSize=atoi(p);    
  285. returnTRUE;    
  286. }    
  287. }    
  288. }    
  289. }    
  290. break;    
  291. caseNOOP_CHECK:    
  292. if(strnicmp(buf,"-ERR",4)==0)    
  293. {    
  294. m_ErrorMessage=_T("ErroroccuredduringNOOP");    
  295. returnFALSE;    
  296. }    
  297. break;    
  298. caseLIST_CHECK:    
  299. if(strnicmp(buf,"-ERR",4)==0)    
  300. {    
  301. m_ErrorMessage=_T("ErroroccuredduringLIST");    
  302. returnFALSE;    
  303. }    
  304. else    
  305. {    
  306. m_PopServer.Receive(buf,sizeof(buf));    
  307. forchar*p=buf;*p!=’.’;p++)    
  308. if(*p==’\t’||*p==’’)    
  309. m_SizeOfMsg.Add(atoi(p));    
  310. }    
  311. break;    
  312. caseRETR_CHECK:    
  313. if(strnicmp(buf,"-ERR",4)==0)    
  314. {    
  315. m_ErrorMessage=_T("ErroroccuredduringRETR");    
  316. returnFALSE;    
  317. }    
  318. else    
  319. {    
  320. chartemp[9000];    
  321. m_PopServer.Receive(temp,sizeof(temp));    
  322. m_MsgContents=temp;    
  323. }    
  324. break;    
  325. }    
  326. returnTRUE;    
  327. }    
  328. CStringCPop::GetErrorMessage()    
  329. {    
  330. returnm_ErrorMessage;    
  331. }    
  332. BOOLCPop::List()    
  333. {    
  334. charbuf[512];    
  335. wsprintf(buf,"LIST\r\n");    
  336. m_PopServer.Send(buf,strlen(buf));    
  337. if(CheckResponse(LIST_CHECK)==FALSE)    
  338. returnFALSE;    
  339. else    
  340. returnTRUE;    
  341. }    

分享到:
评论

相关推荐

    pop3协议封装类

    pop3协议封装类pop3协议封装类pop3协议封装类pop3协议封装类pop3协议封装类pop3协议封装类pop3协议封装类

    pop3类

    pop3协议封装类pop3协议封装类pop3协议封装类

    自已根据SMTP/POP3协议封装的邮件发送组件

    在描述中提到的"自已根据SMTP/POP3协议封装的邮件发送组件",意味着这是一个由个人开发者创建的工具,它将SMTP和POP3协议的功能集成到了一个组件中,简化了邮件发送和接收的编程过程。这样的组件通常会提供C#等编程...

    一个POP3协议 MFC程序

    - 在MFC程序中实现POP3协议,通常需要创建自定义的网络通信类,如CMFCPOP3Client,该类负责与服务器交互。 - 使用MFC的CSocket或CInternetSession类进行网络通信,这些类封装了Winsock API,简化了TCP连接和数据...

    C#使用POP3协议构建客户端邮件接收源代码

    8. **库的使用**:虽然可以直接使用套接字编程实现POP3客户端,但C#社区已有现成的库,如`MailKit`或`System.Net.Mail`,它们封装了POP3协议,提供了更高级别的接口,使开发更加便捷。 压缩包中的"source"文件可能...

    支持pop3的mfc类

    标题 "支持pop3的mfc类" 指的是在Microsoft Foundation Class (MFC) 库中使用C++实现的类,这些类可以用来处理POP3(Post Office Protocol version 3)协议,POP3是一种标准的邮件接收协议,主要用于从邮件服务器...

    pop3邮件接收器

    本程序是一个可移植的(Win32/Linux)邮件接收(支持POP3协议)程序,并编写了可移 植SOCKET和POP3封装类,希望能为初学者提供一些帮助。 编译: Win32: 在VC++6.0下编译通过,并运行良好。 Linux: 在G++下编译通过,请...

    Qt pop3接收邮件并下载附件程序

    POP3协议提供了一系列命令,如`LIST`和`RETR`,用于获取邮件信息和内容。 ```cpp void QMailManager::fetchMessages() { // 使用POP3的LIST命令获取邮件数量 // ... // 然后使用RETR命令逐个下载邮件 // ... } ...

    php_pop3操作类

    “php_pop3操作类”是一个封装了POP3协议操作的PHP类库,其主要特点包括: - **连接管理**:提供建立、维护和关闭与POP3服务器的连接。 - **邮件检索**:支持从服务器上检索所有或特定邮件,包括邮件头部和体部。 -...

    POP3.rar_pop3_pop3.

    这个“POP3.rar_pop3_pop3.”文件很可能包含了一个完整的POP3协议实现,将该协议的功能集成到一个类中,便于开发者在自己的应用程序中使用。通过这个压缩包,我们可以深入理解POP3的工作原理以及如何在实际项目中...

    pop3 实现邮件客户端

    - POP3协议主要用于下载邮件,而不是发送邮件,后者通常由SMTP(Simple Mail Transfer Protocol)处理。 - POP3工作流程包括登录、列出邮件、下载邮件和退出等步骤。 - 客户端与服务器之间的通信基于TCP/IP连接。...

    一个用POP3扩展协议实现的收发SSL验证类邮箱的小程序

    在制作收发邮件的.NET程序时,一般使用JAMIL等第三方组件,但对于需要SSL安全验证的邮箱就有些麻烦了,其实有两种办法,SOCKET和POP3扩展协议,这里上传了一个Pop3mimeclient类实现的收发SSL类邮箱的小程序,该类是...

    pop3 类,可直接使用

    开发者不需要深入了解POP3协议的细节,只需调用相应的类方法,就可以实现邮件的下载和管理。这使得开发人员可以更专注于应用程序的其他核心功能,而不是花费大量时间在邮件系统的实现上。 在实际应用中,这个pop3类...

    POP3.MFC.zip_POP3.MFC_pop_pop3_pop3 m_pop3 mfc

    在给定的标题和描述中,我们看到“POP3.MFC”指的是使用Microsoft Foundation Class (MFC) 库来实现POP3协议的C++编程示例。 MFC是微软提供的一套C++库,它封装了Windows API,简化了Windows应用程序的开发。通过...

    Visual C++ 编程资源大全(英文源码 网络)

    18.zip Net Tools&lt;br&gt;网络工具(7KB)&lt;END&gt;&lt;br&gt;96,19.zip Network Enumeration 列举网络(7KB)&lt;END&gt;&lt;br&gt;97,20.zip POP3 Protocol wrapper class 支持POP3协议的类(7KB)&lt;END&gt;&lt;br&gt;98,21.zip Posting ...

    简单邮件客户端实现POP3和SMTP协议

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC)库来开发一个简单的邮件客户端,该客户端实现了POP3和SMTP协议,以便实现邮件的接收和发送。首先,我们需要了解这些基本概念: **POP3(Post ...

    pop3高级程序开发 c++源码

    首先,要实现一个POP3客户端,需要理解和实现POP3协议的基本命令。POP3协议主要有以下步骤: 1. **连接服务器**:客户端通过TCP/IP建立与POP3服务器的连接,通常使用110端口。 2. **身份验证**:发送`USER`命令提供...

    Pop3高级MFC程序

    POP3协议主要负责从邮件服务器上下载邮件到本地客户端。它基于TCP/IP,通常在110端口上运行。POP3操作分为三个阶段:应答、登录和传输。在应答阶段,客户端与服务器建立连接;在登录阶段,客户端提供用户名和密码...

    socket.zip_http协议封装_socket 封装 类_小型socket封装

    经过封装的socket类,内附简单的pop3和http协议的简单应用源码

Global site tag (gtag.js) - Google Analytics