程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C和C#兩種方式完成郵件的復雜接納

C和C#兩種方式完成郵件的復雜接納

編輯:C#入門知識

C和C#兩種方式完成郵件的復雜接納。本站提示廣大學習愛好者:(C和C#兩種方式完成郵件的復雜接納)文章只能為提供參考,不一定能成為您想要的結果。以下是C和C#兩種方式完成郵件的復雜接納正文


  本文的次要內容是經過兩種方式完成復雜郵件的接納,一種方式是經過C言語完成,另一種是經過C#完成的,

兩種方式在完成上有許多的不同之處,但是實質上都是一樣的.

一,C言語完成方式

C言語接納郵件的步驟:

1.創立TCP銜接   端口:默許110

2.銜接到Pop3服務器 服務器稱號:例如"pop3.163.com"   

3.認證登錄  用戶賬號,密碼

4.發送懇求,接納服務端信息   send(...)  前往"+OK"  

   a.獲取郵箱中郵件的數量    "STAT\r\n" 前往"+OK 10 ..."  

   b.獲取每個郵件的大小  "LIST\r\n" 

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

               nMsg:第nMsg封    

                   nLine:前nLine行

 d.獲取指定郵件信息內容    "RETR [nMsg]\r\n"  

完成代碼如下:

 

//創立TCP銜接

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

 

//銜接到Pop3服務器

 1 void ConnectToServer()
 2 {
 3     //設置SockAddr_In地址構造 
 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 else 18 { 19 WSASetLastError(WSAEINVAL); 20 return; 21 } 22 //銜接 23 connect(connection, (SOCKADDR *)&serAddr, sizeof(serAddr)) 24 return; 25 26 }

 

 //接納數據

//獲取郵箱中郵件的數量

 1 //獲取郵件的數量
 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 )    //前往正確的音訊內容   "+OK 10..."
14       return GetNumFromBuf(response_buf);    
15   return 0;
16 }

 

//獲取每個郵件的大小

 1 //獲取每個郵件的大小
 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);   //前往的數據
13   return TRUE;
14 }

 

//獲取指定郵件的前n行數據

 1 //獲取指定郵件的前n行數據
 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);     //   延遲,等候數據完全接納終了
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 }


//獲取指定郵件的內容

 1 //獲取指定郵件的內容
 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);     //必需添加延遲,以便可以完好的接納數據
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#完成方式

C#接納郵件的步驟:

1.需求引入第三方的類庫(OpenPop.dll 官網下載地址:http://sourceforge.net/projects/hpop/)   ,並且在項目中添加OpenPop的援用.

2.運用OpenPop.dll類庫中的Pop3Client類創立一個Pop3服務端的對象,   

   銜接服務器,並停止認證登錄. host:pop3.163.com port:默許110

3.經過Pop3Client對象中的辦法收取郵件信息.  

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

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

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

  d.DeleteMessage(int messageNumber)      //刪除編號為messageNumber的郵件(僅僅是標志,只要QUIT之後才真正刪除) 

  //...

4.封閉銜接,釋放資源.

 

局部代碼如下:

//創立PopClient對象,銜接認證

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


//獲取郵箱中郵件的相關信息

1  //...
2   int count=client.GetMessageCount(); //獲取郵箱總數
3   int size=client.GetMessageSize(1);  //獲取編號為1的郵件的大小
4   OpenPop.Mime.Message msg=client.GetMessage(1);                    //獲取編號為1的郵件的內容
5   client.DeleteMessage(1);      //標志編號為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    //保管附件內容
18   using( FileStream fs=new FileStream(@"C:\01.txt",FileMode.OpenOrCreate) )
19    {
20       attachments[0].Save(fs);
21    }
22 }
23 //...

 

參考頁面:

http://www.yuanjiaocheng.net/CSharp/Csharp-if-else.html

http://www.yuanjiaocheng.net/CSharp/Csharp-ternary-operator.html

http://www.yuanjiaocheng.net/CSharp/Cshartp-switch.html

http://www.yuanjiaocheng.net/CSharp/Csharp-for-loop.html

http://www.yuanjiaocheng.net/CSharp/Csharp-while-loop.html

it學習材料

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved