网际网路程式设计课件_第1页
网际网路程式设计课件_第2页
网际网路程式设计课件_第3页
网际网路程式设计课件_第4页
网际网路程式设计课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualBasic2005

網際網路程式設計Chpater9VisualBasic2005

網際網路程式設計Chpa1网际网路程式设计课件29-1 POP3介紹SMTP用以傳送郵件的通訊協定,其外寄郵件伺服器(OutgoingMailServer)的預設通訊埠為25,而POP3(PostOfficeProtocolversion3)則是用以接收郵件的通訊協定,其內送郵件伺服器(IncomingMailServer)的預設通訊埠為110。在流程的處理上,與SMTP通訊協定最大的不同在於,SMTP嚴格來說,只有郵件交易(Transaction)過程,並沒有使用者認證(Authorization)的過程,也就是說使用SMTP傳送郵件時,並不需要使用者帳號及密碼,便可透過具有SMTP服務的郵件伺服器,傳送郵件。但POP3則不同,若接收郵件時,不需要使用者帳號及密碼的確認,那麼不是任何人都可以讀取別人的郵件了嗎?因此,Client端透過POP3通訊協定至郵件伺服器讀取郵件時,必須經過使用者認證(Authorization)過程,方可取得郵件。9-1 POP3介紹SMTP用以傳送郵件的通訊協定,其外寄郵3POP3的流程共分為以下三個階段:AUTHORIZATION:使用者認證。TRANSACTION:處理郵件交易。UPDATE:依據TRANSACTION流程之定義,更新郵件信箱。POP3的流程共分為以下三個階段:4以下為收件端連結至郵件伺服器收取郵件過程的內容,為區別起見,在每一行的起頭加上“S:”與“C:”,以代表Server端與Client端之訊息。(Connection)C:Tryingtoconnecttohost.tw,port:110C:Connectingto.tw,port:110S:+OKhellofrompopgate(AUTHORIZATION)C:USERleohkkimoS:+OKpasswordrequired.C:PASSpasswordS:+OKmaildropready,9messages(148129octets)(109557210485760)(TRANSACTION)C:STATS:+OK9148129C:RETR1S:+OK548octetsS:Date:Thu,03May200116:34:27CSTS:From:"LeoHuang"<leohk@.tw>S:Reply-To:"LeoHuang"<leohk@.tw>以下為收件端連結至郵件伺服器收取郵件過程的內容,為區別起見,5S:Subject:POP3MailviaSocketS:To:leohkkimo@.twS:MIME-Version:1.0S:Content-Transfer-Encoding:8bitS:Content-Type:text/plain;charset="Big5"S:Message-ID:<1010503163429.12764@>S:S:ThisisanexampletoreceivethemailS:basedonPOP3protocol.S:LeoS:S:.C:RETR2S:+OK4906octetsS:...(AUTHORIZATION/UPDATE)C:QUITS:+OKdeweyPOP3serversigningoffS:Subject:POP3MailviaSock6不論是那一個階段,RFC均定義了Client所傳送指令的格式以及Server端回應之內容,與SMTP相比較,POP3的指令內容則較為簡單,分別為:Client端所傳送的指令,必須CRLF為結尾。Server端所回應的訊息不似SMTP之複雜(不含三碼數字),只有兩種情況:+OK:代表指令執行正確。-ERR:代表指令執行錯誤。除此之外,在POP3每一階段中,均有相對的指令應用。不論是那一個階段,RFC均定義了Client所傳送指令的格式79-1-1AUTHORIZATION在AUTHORIZATION(使用者認證)階段中,共有以下幾種Client端指令:指令語法USERUSER<loginname>PASSPASS<password>QUITQUIT9-1-1AUTHORIZATION在AUTHORIZAT8此階段的流程分別為:首先Client需與POP3郵件伺服器建立通訊連結,待連結建立後,伺服端會回傳以下之訊息,接著便需處理使用者認證程序:+OKhellofrompopgate在認證程序中,首先Client端以USER指令傳送使用者在POP3郵件伺服器上所註冊的登錄帳號,以確認使用者身份,若帳號存在,Server端會回傳+OK之訊息,否則回傳-ERR訊息,以下是USER指令的處理範例:USERleohuang+OKpasswordrequired.USERabcd-ERRinvaliduser.此階段的流程分別為:9待登錄帳號確認後,Client端需以PASS指令傳送此登錄帳號之密碼,同樣地,若密碼正確,Server端會回傳+OK之訊息,否則回傳-ERR訊息,以下是PASS指令的處理範例。待密碼確認後,便可開始處理郵件接收的交易(Transaction):PASSpassword+OKmaildropready,9messages(148129octets)(109557210485760)PASSabcd-ERRinvalidpassword待登錄帳號確認後,Client端需以PASS指令傳送此登錄帳10AUTHORIZATION階段的最後一個指令則是QUIT(註),當郵件交易處理完畢時,Client端便發送QUIT指令至郵件伺服器中斷連結,以下是QUIT指令的處理範例:QUIT+OKdeweyPOP3serversigningoffAUTHORIZATION階段的最後一個指令則是QUIT(註11下圖為AUTHORIZATION階段的流程整理:下圖為AUTHORIZATION階段的流程整理:129-1-2TRANSACTION在TRANSACTION(郵件交易)階段中,共有以下幾種Client端指令:

指令語法STATSTATLISTLIST[mail#]RETRRETR<mail#>DELEDELENOOPNOOPRSETRSET9-1-2TRANSACTION在TRANSACTION(13STAT:說明郵件交易的開始,Client端會傳送STAT指令至郵件伺服器,以便瞭解使用者信箱(INBOX)中郵件數目及大小,其中第一碼數字代表郵件數目,第二碼代表所有郵件的大小,其單位為octet(八位元組),例如:STAT+OK9148129STAT:14LIST:LIST指令有兩種功能,若沒有參數,代表依序列出每一封郵件的大小(單位為octet)。若希望瞭解某一封郵件的大小,則以郵件序號為LIST指令的參數,需注意的是,郵件序號是由1開始,例如:LIST+OK2messages(320octets)11202200.LIST2+OK2200LIST3-ERRnosuchmessage,only2messagesinmaildropLIST:15RETR:為Retrieve(取得)的縮寫,用以取得郵件內文,包括郵件標題(Header)及郵件內容(Content)。若指令執行成功,Server端會先回傳+OK訊息,告知Client端此郵件大小(單位為octet),接著則依序傳送郵件標題及內容。如何判斷標題、內容及郵件結尾呢?POP3通訊協定在傳送郵件內文時,是依下圖的順序傳送標題與內容,其中標題與內容之間會以空行隔開,並以.CRLF(.\r\n)為郵件結尾。RETR:16致於標題中各行的順序,則會依郵件伺服器的不同而有所差異,以下為RETR指令的範例:RETR1+OK548octetsDate:Thu,03May200116:34:27CSTFrom:"LeoHuang"<leohk@.tw>Reply-To:"LeoHuang"<leohk@.tw>Subject:POP3MailviaSocketTo:leohkkimo@.twMIME-Version:1.0Content-Transfer-Encoding:8bitContent-Type:text/plain;charset="Big5"Message-ID:<1010503163429.12764@>ThisisanexampletoreceivethemailbasedonPOP3protocol.Leo致於標題中各行的順序,則會依郵件伺服器的不同而有所差異,以下17DELE:為Delete(刪除)的縮寫,用以刪除郵件。執行本指令,只是註記(Mark)郵件已被刪除,但實際上,並未真正自郵件信箱中永久移除,必須等到執行QUIT指令,Client端與Server端結束連結時,才會真正地永久移除,因此郵件軟體通常會在執行結束時,詢問使用者確認刪除的動作。以下為DELE指令的範例:DELE1+OKmessage1deletedDELE1-ERRmessage1alreadydeletedDELE:18NOOP:為NoOperation的縮寫,執行此指令,Server端僅會回傳+OK的訊息。RSET:用以取消被註記刪除的郵件,例如:DELE1+OKmessage1deletedRSET+OKmaildrophas2messages(320octets)NOOP:19除了上述指令之外,有些POP3伺服器也支援TOP指令。TOP:用以回傳郵件標題及指定行數的內容,其語法為:TOP<mail#>[line#]其中:mail#:代表郵件序號,此郵件序號不能被註記為刪除。line#:回傳郵件內容(Content)的行數。例如:TOP10+OK548octetsDate:Thu,03May200116:34:27CSTFrom:"LeoHuang"<leohk@.tw>Reply-To:"LeoHuang"<leohk@.tw>Subject:POP3MailviaSocketTo:leohkkimo@.twMIME-Version:1.0Content-Transfer-Encoding:8bitContent-Type:text/plain;charset="Big5"Message-ID:<1010503163429.12764@>除了上述指令之外,有些POP3伺服器也支援TOP指令。20下圖為TRANSACTION階段的流程整理:

下圖為TRANSACTION階段的流程整理:219-1-3UPDATE

當Client端執行QUIT指令與Server端結束通訊連結時,則進入POP3的最後階段-UPDATE,最主要是將在TRANSACTION階段中,被DELE指令刪除的郵件,自郵件信箱中永久移除。此階段沒有任何指令,例如:QUIT+OKdeweyPOP3serversigningoff9-1-3UPDATE當Client端執行QUIT指令與229-2 POP3Client-Scoket欲以VB.NET所提供的System.Net.Sockets.Socket類別透過POP3通訊協定接收郵件,需依照上一節所說明的POP3流程及階段,建立與郵件伺服器的通訊連結,並依序傳送相關指令至伺服器。參考範例9-1POP3.sln

9-2 POP3Client-Scoket欲以VB.N23首先Client端以System.Net.Sockets.Socket類別與POP3郵件伺服器建立Socket通訊連結:範例9-1POP3.sln程式說明

IpHost=System.Net.Dns.Resolve(strHost)IPAdd=IpHost.AddressList(0)IPEndAdd=NewSystem.Net.IPEndPoint(IPAdd.Address,_Int32.Parse(strPort))'嘗試與郵件伺服器建立連結pop3Socket.Connect(IPEndAdd)...'郵件伺服器回傳+OKhellofrompopgate訊息?IfNotPOP3Response()ThenReturnFalse首先Client端以System.Net.Sockets.S24其中自訂POP3Response函式為:PrivateFunctionPOP3Response()AsBooleanDimRecvBytes(256)AsByteDimstrResponseAsString=NothingDimbytesAsInt32Trybytes=pop3Socket.Receive(RecvBytes,RecvBytes.Length,0)strResponse=Encoding.ASCII.GetString(RecvBytes,0,bytes)...IfNotstrResponse.StartsWith("+OK")Then...pop3Socket.Shutdown(SocketShutdown.Both)pop3Socket.Close()ReturnFalseElseReturnTrueEndIfCatchexAsException...pop3Socket.Shutdown(SocketShutdown.Both)pop3Socket.Close()ReturnFalseEndTryEndFunction其中自訂POP3Response函式為:PrivateFu25接著便需處理使用者認證的流程(AUTHORIZATION),依序由Client端傳送下列訊息至郵件伺服器,並同時處理伺服器所回傳的訊息以判斷是否正確:'USERstrMsg="USER"&strUserIf(NotPOP3Request(strMsg))ThenReturnFalse'郵件伺服器回傳+OKpasswordrequired訊息?If(NotPOP3Response())ThenReturnFalse'PASSstrMsg="PASS"&strPassIf(NotPOP3Request(strMsg))ThenReturnFalse'郵件伺服器回傳+OKmaildropready,..messages訊息?If(NotPOP3Response())ThenReturnFalse'STATstrMsg="STAT"If(NotPOP3Request(strMsg))ThenReturnFalse'郵件伺服器回傳+OK<#ofMail><MailSize>bytes=pop3Socket.Receive(RecvBytes,RecvBytes.Length,0)strResponse=Encoding.ASCII.GetString(RecvBytes,0,bytes)If(NotstrResponse.StartsWith("+OK"))ThenReturnFalseEndIf'+OK<#><Size>DimstrTemp()AsStringstrTemp=strResponse.Split("")totalMail=Int32.Parse(strTemp(1).Trim)mailSize=Int32.Parse(strTemp(2).Trim)接著便需處理使用者認證的流程(AUTHORIZATION),26其中自訂POP3Request函式為:PrivateFunctionPOP3Request(ByValstrMsgAsString)AsBooleanDimbyteMsg()AsBytestrMsg=strMsg&ControlChars.CrLfTrybyteMsg=Encoding.ASCII.GetBytes(strMsg.ToCharArray())pop3Socket.Send(byteMsg,byteMsg.Length,SocketFlags.None)...ReturnTrueCatchexAsException...pop3Socket.Shutdown(SocketShutdown.Both)pop3Socket.Close()ReturnFalseEndTryEndFunction其中自訂POP3Request函式為:PrivateFun27認證成功之後,便可處理接收郵件交易(TRANSACTION)。程式中,由Client端透過輸入資料流傳送RETR指令至Server端,待Server端回傳訊息,便讀取郵件標題及內容,其中藉由“.”判斷郵件內容結尾。認證成功之後,便可處理接收郵件交易(TRANSACTION)289-3 POP3Client-TcpClient開發POP3Client端應用程式,除了使用System.Net.Sockets.Socket類別之外,另外亦可使用System.Net.Sockets.TcpClient類別處理,其開發流程為:9-3 POP3Client-TcpClient開發P29首先Client端以TcpClient類別與POP3郵件伺服器建立Socket通訊連結,可使用TcpClient類別的Connect方法以建立用戶端與伺服端的連線,其方法如下:PublicSubConnect(remoteEPAsIPEndPoint)PublicSubConnect(addressAsIPAddress,portAsInteger)PublicSubConnect(hostnameAsString,portAsInteger)PublicSubConnect(ipAddressAsIPAddress(),portAsInteger)首先Client端以TcpClient類別與POP3郵件伺服30參數分別為:remoteEP:伺服端IPAddress與通訊埠號。address:指定伺服端的IPAddress,為System.Net.IPAddress類別形式。hostname:指定伺服端的主機名稱。port:設定伺服端所提供之Internet服務的通訊埠號。例如:Dimpop3SocketAsNewSystem.Net.Sockets.TcpClient()pop3Socket.Connect(strHost,Int32.Parse(strPort))參數分別為:31建立用戶端與伺服端資料傳送接收的輸出入資料流(Input/OutputStream):所建立的TcpClient物件,代表用戶端與伺服端之連線,可藉由TcpClient類別的GetStream方法取得用戶端的輸出入資料流:PublicFunctionGetStream()AsNetworkStream例如:DimnetworkStreamAsStreamnetworkStream=pop3Socket.GetStream()建立用戶端與伺服端資料傳送接收的輸出入資料流(Input/O32接著便以NetworkStream類別的Write方法依序由Client端傳送下列訊息至郵件伺服器,並同時以NetworkStream類別的Read方法處理伺服器所回傳的訊息以判斷是否正確。USERleohuang+OKpasswordrequired.PASSpassword+OKmaildropready,...STAT+OK...LIST+OK...messages(...octets)....RETR1+OK...octets....接著便以NetworkStream類別的Write方法依序由33Client端傳送訊息至郵件伺服器:DimbyteMsg()AsByteTrybyteMsg=Encoding.ASCII.GetBytes(...)networkStream.Write(byteMsg,0,byteMsg.Length)...CatchexAsException...EndTry郵件伺服器回傳訊息至Client端:Dimbytes(pop3Socket.ReceiveBufferSize)AsByteDimstrResponseAsString=NothingTrynetworkStream.Read(bytes,0,CInt(pop3Socket.ReceiveBufferSize))strResponse=Encoding.ASCII.GetString(bytes)...CatchexAsException...EndTryClient端傳送訊息至郵件伺服器:DimbyteMsg(34當郵件傳送完畢時,需以TcpClient類別的Close方法關閉Client端與POP3郵件伺服器之Socket連結,例如:pop3Socket.Close()參考範例9-2POP3.sln

當郵件傳送完畢時,需以TcpClient類別的Close方法35ENDEND36VisualBasic2005

網際網路程式設計Chpater9VisualBasic2005

網際網路程式設計Chpa37网际网路程式设计课件389-1 POP3介紹SMTP用以傳送郵件的通訊協定,其外寄郵件伺服器(OutgoingMailServer)的預設通訊埠為25,而POP3(PostOfficeProtocolversion3)則是用以接收郵件的通訊協定,其內送郵件伺服器(IncomingMailServer)的預設通訊埠為110。在流程的處理上,與SMTP通訊協定最大的不同在於,SMTP嚴格來說,只有郵件交易(Transaction)過程,並沒有使用者認證(Authorization)的過程,也就是說使用SMTP傳送郵件時,並不需要使用者帳號及密碼,便可透過具有SMTP服務的郵件伺服器,傳送郵件。但POP3則不同,若接收郵件時,不需要使用者帳號及密碼的確認,那麼不是任何人都可以讀取別人的郵件了嗎?因此,Client端透過POP3通訊協定至郵件伺服器讀取郵件時,必須經過使用者認證(Authorization)過程,方可取得郵件。9-1 POP3介紹SMTP用以傳送郵件的通訊協定,其外寄郵39POP3的流程共分為以下三個階段:AUTHORIZATION:使用者認證。TRANSACTION:處理郵件交易。UPDATE:依據TRANSACTION流程之定義,更新郵件信箱。POP3的流程共分為以下三個階段:40以下為收件端連結至郵件伺服器收取郵件過程的內容,為區別起見,在每一行的起頭加上“S:”與“C:”,以代表Server端與Client端之訊息。(Connection)C:Tryingtoconnecttohost.tw,port:110C:Connectingto.tw,port:110S:+OKhellofrompopgate(AUTHORIZATION)C:USERleohkkimoS:+OKpasswordrequired.C:PASSpasswordS:+OKmaildropready,9messages(148129octets)(109557210485760)(TRANSACTION)C:STATS:+OK9148129C:RETR1S:+OK548octetsS:Date:Thu,03May200116:34:27CSTS:From:"LeoHuang"<leohk@.tw>S:Reply-To:"LeoHuang"<leohk@.tw>以下為收件端連結至郵件伺服器收取郵件過程的內容,為區別起見,41S:Subject:POP3MailviaSocketS:To:leohkkimo@.twS:MIME-Version:1.0S:Content-Transfer-Encoding:8bitS:Content-Type:text/plain;charset="Big5"S:Message-ID:<1010503163429.12764@>S:S:ThisisanexampletoreceivethemailS:basedonPOP3protocol.S:LeoS:S:.C:RETR2S:+OK4906octetsS:...(AUTHORIZATION/UPDATE)C:QUITS:+OKdeweyPOP3serversigningoffS:Subject:POP3MailviaSock42不論是那一個階段,RFC均定義了Client所傳送指令的格式以及Server端回應之內容,與SMTP相比較,POP3的指令內容則較為簡單,分別為:Client端所傳送的指令,必須CRLF為結尾。Server端所回應的訊息不似SMTP之複雜(不含三碼數字),只有兩種情況:+OK:代表指令執行正確。-ERR:代表指令執行錯誤。除此之外,在POP3每一階段中,均有相對的指令應用。不論是那一個階段,RFC均定義了Client所傳送指令的格式439-1-1AUTHORIZATION在AUTHORIZATION(使用者認證)階段中,共有以下幾種Client端指令:指令語法USERUSER<loginname>PASSPASS<password>QUITQUIT9-1-1AUTHORIZATION在AUTHORIZAT44此階段的流程分別為:首先Client需與POP3郵件伺服器建立通訊連結,待連結建立後,伺服端會回傳以下之訊息,接著便需處理使用者認證程序:+OKhellofrompopgate在認證程序中,首先Client端以USER指令傳送使用者在POP3郵件伺服器上所註冊的登錄帳號,以確認使用者身份,若帳號存在,Server端會回傳+OK之訊息,否則回傳-ERR訊息,以下是USER指令的處理範例:USERleohuang+OKpasswordrequired.USERabcd-ERRinvaliduser.此階段的流程分別為:45待登錄帳號確認後,Client端需以PASS指令傳送此登錄帳號之密碼,同樣地,若密碼正確,Server端會回傳+OK之訊息,否則回傳-ERR訊息,以下是PASS指令的處理範例。待密碼確認後,便可開始處理郵件接收的交易(Transaction):PASSpassword+OKmaildropready,9messages(148129octets)(109557210485760)PASSabcd-ERRinvalidpassword待登錄帳號確認後,Client端需以PASS指令傳送此登錄帳46AUTHORIZATION階段的最後一個指令則是QUIT(註),當郵件交易處理完畢時,Client端便發送QUIT指令至郵件伺服器中斷連結,以下是QUIT指令的處理範例:QUIT+OKdeweyPOP3serversigningoffAUTHORIZATION階段的最後一個指令則是QUIT(註47下圖為AUTHORIZATION階段的流程整理:下圖為AUTHORIZATION階段的流程整理:489-1-2TRANSACTION在TRANSACTION(郵件交易)階段中,共有以下幾種Client端指令:

指令語法STATSTATLISTLIST[mail#]RETRRETR<mail#>DELEDELENOOPNOOPRSETRSET9-1-2TRANSACTION在TRANSACTION(49STAT:說明郵件交易的開始,Client端會傳送STAT指令至郵件伺服器,以便瞭解使用者信箱(INBOX)中郵件數目及大小,其中第一碼數字代表郵件數目,第二碼代表所有郵件的大小,其單位為octet(八位元組),例如:STAT+OK9148129STAT:50LIST:LIST指令有兩種功能,若沒有參數,代表依序列出每一封郵件的大小(單位為octet)。若希望瞭解某一封郵件的大小,則以郵件序號為LIST指令的參數,需注意的是,郵件序號是由1開始,例如:LIST+OK2messages(320octets)11202200.LIST2+OK2200LIST3-ERRnosuchmessage,only2messagesinmaildropLIST:51RETR:為Retrieve(取得)的縮寫,用以取得郵件內文,包括郵件標題(Header)及郵件內容(Content)。若指令執行成功,Server端會先回傳+OK訊息,告知Client端此郵件大小(單位為octet),接著則依序傳送郵件標題及內容。如何判斷標題、內容及郵件結尾呢?POP3通訊協定在傳送郵件內文時,是依下圖的順序傳送標題與內容,其中標題與內容之間會以空行隔開,並以.CRLF(.\r\n)為郵件結尾。RETR:52致於標題中各行的順序,則會依郵件伺服器的不同而有所差異,以下為RETR指令的範例:RETR1+OK548octetsDate:Thu,03May200116:34:27CSTFrom:"LeoHuang"<leohk@.tw>Reply-To:"LeoHuang"<leohk@.tw>Subject:POP3MailviaSocketTo:leohkkimo@.twMIME-Version:1.0Content-Transfer-Encoding:8bitContent-Type:text/plain;charset="Big5"Message-ID:<1010503163429.12764@>ThisisanexampletoreceivethemailbasedonPOP3protocol.Leo致於標題中各行的順序,則會依郵件伺服器的不同而有所差異,以下53DELE:為Delete(刪除)的縮寫,用以刪除郵件。執行本指令,只是註記(Mark)郵件已被刪除,但實際上,並未真正自郵件信箱中永久移除,必須等到執行QUIT指令,Client端與Server端結束連結時,才會真正地永久移除,因此郵件軟體通常會在執行結束時,詢問使用者確認刪除的動作。以下為DELE指令的範例:DELE1+OKmessage1deletedDELE1-ERRmessage1alreadydeletedDELE:54NOOP:為NoOperation的縮寫,執行此指令,Server端僅會回傳+OK的訊息。RSET:用以取消被註記刪除的郵件,例如:DELE1+OKmessage1deletedRSET+OKmaildrophas2messages(320octets)NOOP:55除了上述指令之外,有些POP3伺服器也支援TOP指令。TOP:用以回傳郵件標題及指定行數的內容,其語法為:TOP<mail#>[line#]其中:mail#:代表郵件序號,此郵件序號不能被註記為刪除。line#:回傳郵件內容(Content)的行數。例如:TOP10+OK548octetsDate:Thu,03May200116:34:27CSTFrom:"LeoHuang"<leohk@.tw>Reply-To:"LeoHuang"<leohk@.tw>Subject:POP3MailviaSocketTo:leohkkimo@.twMIME-Version:1.0Content-Transfer-Encoding:8bitContent-Type:text/plain;charset="Big5"Message-ID:<1010503163429.12764@>除了上述指令之外,有些POP3伺服器也支援TOP指令。56下圖為TRANSACTION階段的流程整理:

下圖為TRANSACTION階段的流程整理:579-1-3UPDATE

當Client端執行QUIT指令與Server端結束通訊連結時,則進入POP3的最後階段-UPDATE,最主要是將在TRANSACTION階段中,被DELE指令刪除的郵件,自郵件信箱中永久移除。此階段沒有任何指令,例如:QUIT+OKdeweyPOP3serversigningoff9-1-3UPDATE當Client端執行QUIT指令與589-2 POP3Client-Scoket欲以VB.NET所提供的System.Net.Sockets.Socket類別透過POP3通訊協定接收郵件,需依照上一節所說明的POP3流程及階段,建立與郵件伺服器的通訊連結,並依序傳送相關指令至伺服器。參考範例9-1POP3.sln

9-2 POP3Client-Scoket欲以VB.N59首先Client端以System.Net.Sockets.Socket類別與POP3郵件伺服器建立Socket通訊連結:範例9-1POP3.sln程式說明

IpHost=System.Net.Dns.Resolve(strHost)IPAdd=IpHost.AddressList(0)IPEndAdd=NewSystem.Net.IPEndPoint(IPAdd.Address,_Int32.Parse(strPort))'嘗試與郵件伺服器建立連結pop3Socket.Connect(IPEndAdd)...'郵件伺服器回傳+OKhellofrompopgate訊息?IfNotPOP3Response()ThenReturnFalse首先Client端以System.Net.Sockets.S60其中自訂POP3Response函式為:PrivateFunctionPOP3Response()AsBooleanDimRecvBytes(256)AsByteDimstrResponseAsString=NothingDimbytesAsInt32Trybytes=pop3Socket.Receive(RecvBytes,RecvBytes.Length,0)strResponse=Encoding.ASCII.GetString(RecvBytes,0,bytes)...IfNotstrResponse.StartsWith("+OK")Then...pop3Socket.Shutdown(SocketShutdown.Both)pop3Socket.Close()ReturnFalseElseReturnTrueEndIfCatchexAsException...pop3Socket.Shutdown(SocketShutdown.Both)pop3Socket.Close()ReturnFalseEndTryEndFunction其中自訂POP3Response函式為:PrivateFu61接著便需處理使用者認證的流程(AUTHORIZATION),依序由Client端傳送下列訊息至郵件伺服器,並同時處理伺服器所回傳的訊息以判斷是否正確:'USERstrMsg="USER"&strUserIf(NotPOP3Request(strMsg))ThenReturnFalse'郵件伺服器回傳+OKpasswordrequired訊息?If(NotPOP3Response())ThenReturnFalse'PASSstrMsg="PASS"&strPassIf(NotPOP3Request(strMsg))ThenReturnFalse'郵件伺服器回傳+OKmaildropready,..messages訊息?If(NotPOP3Response())ThenReturnFalse'STATstrMsg="STAT"If(NotPOP3Request(strMsg))ThenReturnFalse'郵件伺服器回傳+OK<#ofMail><MailSize>bytes=pop3Socket.Receive(RecvBytes,RecvBytes.Length,0)strResponse=Encoding.ASCII.GetString(RecvBytes,0,bytes)If(NotstrResponse.StartsWith("+OK"))ThenReturnFalseEndIf'+OK<#><Size>DimstrTemp()AsStringstrTemp=strResponse.Split("")totalMail=Int32.Parse(strTemp(1).Trim)mailSize=Int32.Parse(strTemp(2).Trim)接著便需處理使用者認證的流程(AUTHORIZATION),62其中自訂POP3Request函式為:PrivateFunctionPOP3Request(ByValstrMsgAsString)AsBooleanDimbyteMsg()AsBytestrMsg=strMsg&ControlChars.CrLfTrybyteMsg=Encoding.ASCII.GetBytes(strMsg.ToCharArray())pop3Socket.Send(byteMsg,byteMsg.Length,SocketFlags.None)...ReturnTrueCatchexAsException...pop3Socket.Shutdown(SocketShutdown.Both)pop3Socket.Close()ReturnFalseEndTryEndFunction其中自訂POP3Request函式為:PrivateFun63認證成功之後,便可處理接收郵件交易(TRANSACTION)。程式中,由Client端透過輸入資料流傳送RETR指令至Server端,待Server端回傳訊息,便讀取郵件標題及內容,其中藉由“.”判斷郵件內容結尾。認證成功之後,便可處理接收郵件交易(TRANSACTION)64

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论