国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C和C#兩種方式實(shí)現(xiàn)郵件的簡單接收

2019-11-17 02:40:56
字體:
供稿:網(wǎng)友

C和C#兩種方式實(shí)現(xiàn)郵件的簡單接收

本文的主要內(nèi)容是通過兩種方式實(shí)現(xiàn)簡單郵件的接收,一種方式是通過C語言實(shí)現(xiàn),另一種是通過C#實(shí)現(xiàn)的,

兩種方式在實(shí)現(xiàn)上有許多的不同之處,但是本質(zhì)上都是一樣的.

一,C語言實(shí)現(xiàn)方式

C語言接收郵件的步驟:

1.創(chuàng)建TCP連接 端口:默認(rèn)110

2.連接到Pop3服務(wù)器 服務(wù)器名稱:例如"pop3.163.com"

3.認(rèn)證登錄 用戶賬號,密碼

4.發(fā)送請求,接收服務(wù)端信息 send(...) 返回"+OK"

   a.獲取郵箱中郵件的數(shù)量 "STAT/r/n" 返回"+OK 10 ..."

   b.獲取每個(gè)郵件的大小 "LIST/r/n"

  c.獲取指定郵件的前n行數(shù)據(jù) "TOP [nMsg] [nLine]"

               nMsg:第nMsg封

               nLine:前nLine行

d.獲取指定郵件信息內(nèi)容 "RETR [nMsg]/r/n"

實(shí)現(xiàn)代碼如下:

//創(chuàng)建TCP連接

1 if ((connection = socket(AF_INET, SOCK_STREAM, ipPROTO_TCP)) == INVALID_SOCKET)2 {3    return INVALID_SOCKET;4 }

//連接到Pop3服務(wù)器

 1 void ConnectToServer() 2 { 3     //設(shè)置SockAddr_In地址結(jié)構(gòu)  4     SOCKADDR_IN serAddr; 5     serAddr.sin_family = AF_INET; 6     serAddr.sin_port = htons(POP3_PORT);/*POP3_PORT=110*/ 7     //serverName="POP3.163.com"; 8     serAddr.sin_addr.s_addr = inet_addr(serverName); 9     if (serAddr.sin_addr.s_addr == INADDR_NONE)10     {11     LPHOSTENT lphost;12     lphost = gethostbyname(serverName);13     if (lphost != NULL)14     {15         serAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->S_un.S_addr;16     }17     else18     {19         WSASetLastError(WSAEINVAL);20         return;21     }22     //連接23     connect(connection, (SOCKADDR *)&serAddr, sizeof(serAddr))   24     return;  25 26 }

//接收數(shù)據(jù)

//獲取郵箱中郵件的數(shù)量

 1 //獲取郵件的數(shù)量 2 int GetNumEmail(SOCKET connection) 3 { 4   char sStat[10]={"STAT/r/n"}; 5   char response_buf[RESPONSE_BUFFER_SIZE]={0}; 6  7   send(connection,sStat,strlen(sStat),0); 8   if( recv(connection,response_buf,RESPONSE_BUFFER_SIZE,0)==SOCKET_ERROR ) 9       return -1;10 11   char szResponse[20]={0};12   strncpy(szResponse,response_buf,3);13   if( strcmp(szResponse,"+OK")==0 )    //返回正確的消息內(nèi)容   "+OK 10..."14       return GetNumFromBuf(response_buf);    15   return 0;16 }

//獲取每個(gè)郵件的大小

 1 //獲取每個(gè)郵件的大小 2 BOOL GetList(SOCKET connection) 3 { 4    char szList[100]={0}; 5    sprintf(szList,"LIST/r/n"); 6  7    char response_buf[RESPONSE_BUFFER_SIZE]={0}; 8    send(connection,szList,strlen(szList),0); 9    if( recv(connection,response_buf,RESPONSE_BUFFER_SIZE,0)==SOCKET_ERROR )10       return FALSE;11 12    printf("receive data:%s",response_buf);   //返回的數(shù)據(jù)13   return TRUE;14 }

//獲取指定郵件的前n行數(shù)據(jù)

 1 //獲取指定郵件的前n行數(shù)據(jù) 2 BOOL GetTop(SOCKET connection,int nMsg,int nLine) 3 { 4   char szTop[100]={0}; 5   sprintf(szTop,"TOP %d %d/r/n",nMsg,nLine); 6  7   char response_buf[RESPONSE_BUFFER_SIZE]={0}; 8   send(connection,szTop,strlen(szTop),0); 9   Sleep(nLine*20);     //   延遲,等待數(shù)據(jù)完全接收完畢10   if( recv(connection,response_buf,RESPONSE_BUFFER_SIZE,0)==SOCKET_ERROR)11       return    FALSE;12 13   printf("Receive Data:%s/n",response_buf);14   return TRUE;15 }

//獲取指定郵件的內(nèi)容

 1 //獲取指定郵件的內(nèi)容 2 BOOL GetEmail(SOCKET connection,int nMsg,char *msg) 3 { 4   char sRetr[100]={0}; 5   sprintf(sRetr,"RETR %d/r/n",nMsg); 6    7   char response_buf[RESPONSE_BUFFER_SIZE*10]={0}; 8   send(connection,sRetr,strlen(sRetr),0); 9   Sleep(1000);     //必須添加延遲,以便能夠完整的接收數(shù)據(jù)10   if( recv(connection,response_buf,RESPONSE_BUFFER_SIZE*10,0) ==SOCKET_ERROR )11       return FALSE;12 13   printf("Receive Data:%s/n",response_buf);14   return TRUE;15 }


一,C#實(shí)現(xiàn)方式

C#接收郵件的步驟:

1.需要引入第三方的類庫(OpenPop.dll 官網(wǎng)下載地址:http://sourceforge.net/projects/hpop/) ,并且在項(xiàng)目中添加OpenPop的引用.

2.使用OpenPop.dll類庫中的Pop3Client類創(chuàng)建一個(gè)Pop3服務(wù)端的對象,

連接服務(wù)器,并進(jìn)行認(rèn)證登錄. host:pop3.163.com port:默認(rèn)110

3.通過Pop3Client對象中的方法收取郵件信息.

a.GetMessageCount() //獲取郵件的數(shù)量

b.GetMessage(int messageNumber) //獲取編號為messageNumber的郵件的內(nèi)容

c.GetMessageSize(int messageNumber) //獲取編號為messageNumber的郵件的大小

d.DeleteMessage(int messageNumber) //刪除編號為messageNumber的郵件(僅僅是標(biāo)記,只有QUIT之后才真正刪除)

//...

4.關(guān)閉連接,釋放資源.

部分代碼如下:

//創(chuàng)建PopClient對象,連接認(rèn)證

1 using( Pop3Client client=new Pop3Client() )2 {3    Client.Connect(host, Pop3_Port, false);4 5   //賬號,密碼,認(rèn)證方式6    Client.Authenticate(userAddr, passWord, AuthenticationMethod.Auto);  //登錄認(rèn)證7   //...8 } 

//獲取郵箱中郵件的相關(guān)信息

1  //...2   int count=client.GetMessageCount(); //獲取郵箱總數(shù)3   int size=client.GetMessageSize(1);  //獲取編號為1的郵件的大小4   OpenPop.Mime.Message msg=client.GetMessage(1);                    //獲取編號為1的郵件的內(nèi)容5   client.DeleteMessage(1);      //標(biāo)記編號為1的郵件為"刪除" 6 7 //...    

//獲取郵件的頭部以及附件信息

 1 //... 2   OpenPop.Mime.Message msg=client.GetMessage(1); 3  4   //從msg中的Headers成員中獲取信息 5  string from=msg.Headers.From.Address; 6   string SendDate=msg.Headers.DateSent.ToLocalTime().ToString(); 7   string Subject=msg.Headers.Subject; 8   string Body=msg.FindFirstPlainTextVersion().GetBodyText(); 9 10   //獲取附件信息11  List<MessagePart> attachments=msg.FindAllAttachments();12  int attachCount=attachments.Count;13  if( attachCount>0 )14  {15    string fileName=attachments[0].FileName;   //附件名稱16 17    //保存附件內(nèi)容18   using( FileStream fs=new FileStream(@"C:/01.txt",FileMode.OpenOrCreate) )19    {20       attachments[0].Save(fs);21    }22 }23 //...


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 枞阳县| 新丰县| 阿拉善左旗| 富阳市| 芦溪县| 任丘市| 绥宁县| 易门县| 中阳县| 育儿| 遵化市| 精河县| 永登县| 师宗县| 丁青县| 竹山县| 鱼台县| 淮滨县| 开封市| 阿尔山市| 临夏县| 长子县| 乳山市| 石棉县| 黎城县| 巴楚县| 高雄市| 临泽县| 蓬溪县| 边坝县| 商城县| 土默特左旗| 合水县| 浠水县| 于田县| 洪泽县| 西畴县| 长沙县| 铅山县| 常山县| 延寿县|