運(yùn)用C#實現(xiàn)POP3郵件接收程序_第1頁
運(yùn)用C#實現(xiàn)POP3郵件接收程序_第2頁
運(yùn)用C#實現(xiàn)POP3郵件接收程序_第3頁
運(yùn)用C#實現(xiàn)POP3郵件接收程序_第4頁
運(yùn)用C#實現(xiàn)POP3郵件接收程序_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

運(yùn)用C#實現(xiàn)POP3郵件接收程序微軟的VS.Net開發(fā)工具推出已有一段時日了,其中的那門新語言C#也日漸為大家所熟悉并接受。C#作為一門新興的語言相信具有傳統(tǒng)語言不可比擬的優(yōu)越性,特別是在網(wǎng)絡(luò)應(yīng)用方面,開發(fā)者更是感覺到了C#的強(qiáng)大功能。所以本文就通過運(yùn)用C#來實現(xiàn)一個基于POP3協(xié)議的郵件接收程序來向大家展示C#網(wǎng)絡(luò)編程的功能強(qiáng)大,同時也向大家介紹一下基于POP3協(xié)議的電子郵件接收原理。首先我向大家介紹郵件接收的基本原理:一開始便是客戶端與服務(wù)器的連接。不過,在客戶端連接到服務(wù)器之前,注意把端口設(shè)為POP3協(xié)議默認(rèn)的110號。客戶端連接服務(wù)器成功后,服務(wù)器會返回以下信息:+OK……字符+OK是POP3協(xié)議的返回信息。它的回應(yīng)信息不像SMTP協(xié)議那樣用豐富多變的數(shù)字表示,只有兩個:+OK或者-ERR。其中,+OK表示連接成功,而-ERR則表示連接失敗。接下來,客戶端輸入USER〈用戶名〉該命令告訴服務(wù)器你的用戶名。注意,有些服務(wù)器會區(qū)分大小寫字母的。服務(wù)器返回+OK后,客戶端輸入PASS〈口令〉服務(wù)器返回+OK后,還返回一些郵箱的統(tǒng)計信息,比如:+OK1message(s)[1304byte(s)]不同的服務(wù)器返回的信息格式不太一樣,所以我們可以用STAT命令來查看郵箱的情況。STAT命令的回應(yīng)中有兩個數(shù)字,分別表示郵件的數(shù)量和郵件的大小。如果信箱里有信,就可以用RETR命令來獲取郵件的正文。RETR命令的格式為:RETR〈郵件編號〉如果返回結(jié)果第一行是+OK信息,則表示成功。第二行起便是郵件的正文。最后一行和SMTP協(xié)議一樣,是一個單獨(dú)的英文句號,表示郵件的結(jié)尾部分。把郵件存儲起來后要用DELE命令刪除郵箱中的郵件,否則原有的郵件會繼續(xù)保留在服務(wù)器上,一旦郵件一多,你的郵箱就爆了。DELE命令的格式為:DELE〈郵件編號〉如果刪錯了,可以用RSET命令來恢復(fù)所有已被刪除的郵件。條件是你還沒有退出,一旦退出,那就一切ByeBye了。全部完成以后,輸入QUIT命令就可以退出POP3服務(wù)器了。實現(xiàn)以上,我簡要地向大家介紹了POP3郵件接收的基本過程和原理,下面就是一個運(yùn)用上面的原理實現(xiàn)的簡易的郵件接收程序。有了對基本原理的理解,編程的工作就變得相當(dāng)輕松了。在本程序中,我主要用到了兩個類:TcpClient類和Networkstream類。TcpClient類是運(yùn)用C#進(jìn)行網(wǎng)絡(luò)編程的一個非常重要的類,它提供了通過網(wǎng)絡(luò)連接、發(fā)送和接收數(shù)據(jù)的簡單方法,從而實現(xiàn)了網(wǎng)絡(luò)編程的大大簡化。NetworkStream類實現(xiàn)通過網(wǎng)絡(luò)套接字發(fā)送和接收數(shù)據(jù)的標(biāo)準(zhǔn).Net框架流機(jī)制,它支持對網(wǎng)絡(luò)數(shù)據(jù)流的同步和異步訪問,是實現(xiàn)網(wǎng)絡(luò)通訊的重要組成部分。在這里我先給出程序最終的運(yùn)行效果,圖示如下:

具體的過程步驟如下:第一步:打開VS.Net,新建一個工程,在項目類型里選擇“Visual(3#項目”,在模板里選擇“Windows應(yīng)用程序”,工程名不妨為“MailReceiver”,最后點(diǎn)擊“確定”按鈕。第二步:布置主界面。先往窗體上添加如下控件:六個Label控件、四個TextBox控件、一個RichTextBox控件、一個CheckBox控件、一個ListBox控件以及三個Button控件。各個控件的屬性設(shè)置如下表所示:Form1(主窗體)Text屬性POP3郵件接收程序MaximizeBox屬性FalseLabel1Text屬性POP3服務(wù)器地址:TextAlign屬性MiddleRightLabel2Text屬性用戶名:

TextAlign屬性MiddleRightLabel3Text屬性密碼:TextAlign屬性MiddleRightLabel4Text屬性信息:TextAlign屬性MiddleLeftLabel5Text屬性郵件編號:TextAlign屬性MiddleLeftLabel6Text屬性狀態(tài):TextAlign屬性MiddleLeftPopServer、Username、Password、MailNum(TextBox控件)Text屬性(均為空)Password的PasswordChar屬性*Message(RichTextBox控件)Text屬性(為空)BackupChBox(CheckBox控件)Text屬性在郵件服務(wù)器上保留備份Status(ListBox控件)ItemHeight屬性12Connect(Button控件)Text屬性連接FlatStyle屬性FlatDisconnect (Button控件)Text屬性斷開連接FlatStyle屬性FlatEnabled屬性FalseRetrieve(Button控件)Text屬性收取郵件FlatStyle屬性FlatEnabled屬性False其他屬性均可為默認(rèn)值。在設(shè)置完以上的各個控件屬性后,對主窗體進(jìn)行合理的布局,則可得到最終的界面示意圖如下所示:

第三步:代碼編寫。首先因為程序中運(yùn)用到網(wǎng)絡(luò)編程的一些重要的類,如:TcpClient、Networkstream,所以在程序的開頭處需添加以下名字空間(Namespace):usingSystem.Net;usingSystem.Net.Sockets;usingSystem.IO;接著,為我們的類添加以下一些公有的數(shù)據(jù)成員:publicTcpClientServer;publicNetworkStreamNetStrm;publicStreamReaderRdStrm;publicstringData;publicbyte口szData;publicstringCRLF=〃\r\n〃;最后,便是三個按鈕的消息響應(yīng)函數(shù),這三個函數(shù)是程序的主體部分。其中Connect按鈕的消息響應(yīng)函數(shù)完成了到POP3服務(wù)器的連接工作,并根據(jù)用戶名和密碼進(jìn)行登錄。如果一切順利,則再向服務(wù)器發(fā)送STAT命令從而獲得郵箱中郵件的相關(guān)信息:郵件數(shù)量和大小,最終完成連接。其函數(shù)實現(xiàn)如下:privatevoidConnect_Click(objectsender,System.EventArgse)(//將光標(biāo)置為等待狀態(tài)Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;〃用110端口新建POP3服務(wù)器連接Server=newTcpClient(PopServer.Text,110);Status.Items.Clear();try(//初始化NetStrm=Server.GetStream();RdStrm=newStreamReader(Server.GetStream());Status.Items.Add(RdStrm.ReadLine());〃登錄服務(wù)器過程Data="USER〃+Username.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());Data="PASS"+Password.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());//向服務(wù)器發(fā)送STAT命令,從而取得郵箱的相關(guān)信息:郵件數(shù)量和大小Data="STAT〃+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());//改變按鈕的狀態(tài)Connect.Enabled=false;Disconnect.Enabled=true;Retrieve.Enabled=true;〃將光標(biāo)置回原來的狀態(tài)Cursor.Current=cr;}catch(InvalidOperationExceptionerr)Status.Items.Add("Error:"+err.ToString());}而Disconnect按鈕的消息響應(yīng)函數(shù)則通過向服務(wù)器發(fā)送QUIT命令來終止和郵件服務(wù)器的連接,實現(xiàn)比較簡單,具體函數(shù)如下:list2privatevoidDisconnect_Click(objectsender,System.EventArgse)(//將光標(biāo)置為等待狀態(tài)Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;//向服務(wù)器發(fā)送QUIT命令從而結(jié)束和POP3服務(wù)器的會話Data="QUIT"+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());〃斷開連接NetStrm.Close();RdStrm.Close();〃改變按鈕的狀態(tài)Connect.Enabled=true;Disconnect.Enabled=false;Retrieve.Enabled=false;〃將光標(biāo)置回原來的狀態(tài)Cursor.Current=cr;}最后,Retrieve按鈕的消息響應(yīng)函數(shù)則根據(jù)用戶在郵件編號文本框中的輸入來取得相應(yīng)的郵件,它向服務(wù)器發(fā)送的命令為RETR,并根據(jù)返回的信息判斷郵件的有無。若返回信息的第一個字符為“+”,則表示+OK,也即成功;若為“-”,則表示-ERR,也即為失敗。在成功的情況下,若用戶選擇了“在郵件服務(wù)器上保留備份”,則收取郵件后不刪除服務(wù)器上的備份,否則用DELE命令來進(jìn)行相應(yīng)的刪除。函數(shù)實現(xiàn)如下:privatevoidRetrieve_Click(objectsender,System.EventArgse)(//將光標(biāo)置為等待狀態(tài)Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;stringszTemp;Message.Clear();try(〃根據(jù)郵件編號從服務(wù)器獲得相應(yīng)郵件Data="RETR〃+MailNum.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);szTemp=RdStrm.ReadLine();if(szTemp[0]!='-')(//不斷地讀取郵件內(nèi)容,只到結(jié)束標(biāo)志:英文句號while(szTemp!二〃.〃)Message.Text+=szTemp;szTemp=RdStrm.ReadLine();}〃若BackupChBox未選中,則收取郵件后,刪除保留在服務(wù)器上的郵件if(BackupChBox.Checked==false)(Data="DELE"+MailNum.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());}}elseStatus.Items.Add(szTemp);}〃將光標(biāo)置回原來的狀態(tài)Cursor.Current=cr;}catch(InvalidOperationExceptionerr)(Status.Items.Add("Error:〃+err.ToString());}}最后一步便是保存你的勞動成果,再進(jìn)行編譯、建立并運(yùn)行了,最終的圖示我已

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論