亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用C#.NET實現電子郵件客戶程序

2019-11-14 16:33:04
字體:
來源:轉載
供稿:網友

用C#.NET實現電子郵件客戶程序

周華清 戴晟輝(東華理工學院計算機與通信系 江西 撫州 344000)

【摘要】通過C#這種VisualSTudio.NET中新引入的面向對象且類型安全的編程語言,在.NET平臺上開發電子郵件客戶程序。通過套接字編程實現網絡通信連接,闡述SMTP(簡單郵件傳輸協議)和POP3(郵局協議)的工作原理,然后具體講解了根據SMTP協議開發電子郵件客戶端的郵件發送程序,根據POP3協議開發電子郵件客戶端的郵件接收程序。

【關鍵詞】套接字  簡單郵件傳輸協議  郵局協議

1 C#中套接字的編程

套接字是通信的基石,是支持TCP/ip協議網絡通信的基本操作單元。可以將套接字看做不同主機間的進程進行雙向通信的端點,它構成了單個主機內及整個網絡間的編程界面。套接字存在于通信域中。通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序)。各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。

針對C#中Socket編程用Socket類來進行,.NET 框架的Socket類是包含在System.Net.Sockets名字空間中的一個非常重要的類,其中為實現網絡編程提供了大量的方法。使用Socket類開發windows網絡應用程序原來有規可尋,它們在大多數情況下遵循大致相同的步驟。

在使用之前,你需要首先創建Socket對象的實例,這可以通過Socket類的構造方法來實現:

public Socket(AddressFamily addressFamily,SocketType socketType,PRotocolType protocolType);

其中,addressFamily參數指定Socket使用的尋址方案;socketType參數,指定Socket的類型;protocolType參數,指定Socket使用的協議。

下面的示例語句創建一個Socket,它可用于在基于TCP/IP的網絡(如Internet)上通訊。

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

若要使用UDP而不是TCP,需要更改協議類型,如下面的示例所示:

Socket s=newSocket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

一旦創建Socket,在客戶端,將可以通過Connect方法連接到指定的服務器,并通過Send/SendTo方法向遠程服務器發送數據,而后可以通過Receive/ReceiveFrom方法從服務端接收數據;而在服務器端,你需要使用Bind方法綁定所指定的接口使Socket與一個本地終結點相聯,并通過Listen方法偵聽該接口上的請求,當偵聽到用戶端的連接時,調用Accept完成連接的操作,創建新的Socket以處理傳入的連接請求。使用完Socket后,記住使用Shutdown方法禁用Socket,并使用Close方法關閉Socket。

 2 SMTP和POP3協議的工作過程

在Internet上發送/接收電子郵件,要用到二個協議:SMTP(簡單郵件傳輸協議)和POP3(郵局協議)。下面從SMTP和POP3協議入手,說明如何發送和接收電子郵件。

如圖1,描述了從發件人使用主機(Client1)發送一封郵件從郵箱one@server1.com發往郵箱two@server2.com(其中域名為server1.com的郵件系統安裝在Server1上,域名為server2.com的郵件系統安裝在Server2上),收件人通過主機(Client2)接收到這封郵件的過程。在郵件傳送的各個階段要采用不同的網絡協議。   

(1)發件人采用Mail Client端軟件在Client 1處撰寫一封郵件發給收件人,首先是將該郵件從Client1發送到他本人的郵箱one@server1.com所在的服務器Server1上。這一步由Client1發往Server的過程采用的是SMTP協議。

 

                          圖1 電子郵件傳送過程示意圖

(2)郵件可以從發件人的郵件服務器Server1直接傳送到收件人郵箱two@server2.com所在的服務器Server2上,也可能需要經過第三方的郵件服務器Server3做中轉后再送達接收方,這個過程稱為Relay。這一步在Mail Server之間進行郵件傳送的過程采用的是SMTP協議。郵件發送到接收方的服務器Server2上后,由Server2負責將該郵件投遞到收件人的郵箱two@server2.com中,保存在Server2的磁盤陣列中。此時,郵件傳送過程結束。

(3)收件人訪問他在Server2上的郵箱two@server2.com時,采用Mail Client端軟件Client2將Server2郵箱中的郵件下載到本地硬盤上閱讀。這一步將郵件從Server下載到Client的過程采用的是POP3協議。

開發電子郵件客戶端實際上也就是利用套接字(Socket)編程進行對話通訊,按照SMTP協議和POP3協議的規范完成郵件傳輸。

3 郵件發送模塊的實現

 SMTP協議是TCP/IP協議棧中的一個廣為使用的上層協議。SMTP定義了如何在兩個用戶間傳輸郵件,使用了spooling的概念,允許將郵件從一個本地應用發送到一個SMTP應用。SMTP應用把郵件存儲到一個設備或內存中,一旦郵件到達SMTP應用,該郵件被放入到一個隊列中,一個服務器檢查是否有郵件到達,然后試圖投遞到達的郵件。如果郵件的收方不存在,服務器然后還會再進行嘗試。最終,如果郵件不能被投遞,則將該郵件丟棄或返回給郵件的發送者。這一概念被稱為端到端的投遞,并且它將郵件保存在隊列中,直到郵件被投遞出去。我們可以從兩個RFC中找到有關SMTP的討論。RFC822描述了報文的結構,其中還包括了信封。RFC821規定了在兩臺機器間控制郵件交換的協議。

以下模塊利用TcpClient類開發一個SMTP客戶端,以發送郵件。

3.1 發送SMTP命令

SMTP服務器一般都識別UTF8碼,所有發送命令都使用UTF8編碼,每個命令均以回車換行符結束。下列代碼實現命令的發送功能。

private void WriteToNetStream(ref NetworkStream NetStream.string Command)

{  string stringToSend = Command + "/r/n";

 Byte[] arrayToSend = System.Text.Encoding.UTF8.GetBytes

        (stringToSend.ToCharArray());

   NetStream.Write(arrayToSend,0,arrayToSend.Length);}

3.2 答應碼的接收

SMTP服務器對每一個都發出響應。下列代碼實現接受答應碼的功能。

private string ReadFromNetStream(ref NetworkStream NetStream)

{ byte[] bb=new byte[512];

  NetStream.Read(bb,0,bb.Length);

  string read=System.Text.Encoding.UTF8.GetString(bb);}

 3.3 應答碼檢查

發送郵件客戶端必須要檢查應答碼,以判斷服務器是否已經執行了命令。如果服務器沒有執行,則重新發送命令或采用其他措施。下列代碼可以檢查服務器是否正確地執行了命令。

private string checkForError(string strMessage,string check)

{  if (strMessage.Indexof(check) == -1)

      { return "err";}

else{return "correct";}}

上述方法的第一個參數是服務器返回信息,第二個參數是要檢查的答應碼。如果服務器返回的信息中不存在第二個參數的字符串,則返回“err”,表明服務器沒正確執行命令。

 3.4 發送郵件

客戶端發出DATA命令,在服務器作出354應答后,即可開始郵件內容的發送。郵件以<CRLF>.<CRLF>結束。下列代碼實現了郵件發送功能。

private void sendMail(ref NetworkStream NetStream, string message)

{   Byte[] attayToSend = System.Text.Encoding.UTF8.GetBytes

(message.ToCharArray());

   NetStream.Write(arrayToSend,0,arrayToSend.Length);}

4 郵件接收模塊的實現

POP允許本地郵件UA(User Agent,用戶代理)連接SERVER并將郵件取回到用戶本地系統,用戶也在本地機上閱讀和響應消息。POP3UA通過TCP/IP與服務器連接(通常使用端口110)。輸入用戶名和口令經過認證后,UA可通過POP3命令取回或刪除郵件。POP3僅僅是接收協議。POP3UA使用SMTP向服務器發送郵件。

利用POP3協議開發一個郵件接收程序,使用USER、PASS、STAT、LIST、RETR、DELE、QUIT命令。下面開始開發過程。

 4.1 發送命令碼

 在此發送命令碼也使用的是ASCII碼。下列方法用于向服務器發送命令碼:

private void WriteToNetStream(ref NetworkStream NetStream.string Command)

{   string stringToSend = Command + "/r/n";

    Byte[]arrayToSend= System.Text.Encoding.ASCII.GetBytes

            (stringToSend.ToCharArray());

    NetStream.Write(arrayToSend,0,arrayToSend.Length);}

4.2 接收服務器應答

一般而言,接收服務器應答,既可使用ASCII碼,也可以使用UTF8碼,這里使用的是ASCII碼。下列方法用于接受服務器的應答。

private string ReadFromNetStream(ref NetworkStream NetStream)

{  byte[] bb=new byte[1024];

   NetStream.Read(bb,0,bb.Length);

   string read=System.Text.Encoding.ASCII.GetString(bb);

   return read;}

4.3 接受郵件

在此接收郵件用UTF8碼,當遇到<CRKF>.<CRLF>,則結束讀取數據。下列代碼用于接收郵件:

private void ReadMail(ref NetworkStream NetStream,int number)

{  int k=0;

   bool check=false;

   byte[] bb=new byte[6400];

   while(!check)

     { k=NetStream.Read(bb,0,bb.Length);

   string read=System.Text.Encoding.UTF8.GetString(bb,0,k);

       int x= read.IndexOf("/r/n./r/n");

       if(x!=-1)

          { check=true;}

          richTextBox2.AppendText(read);

          WriteToNetStream(ref

 NetStream,"DELE "+number.ToString());

          string back=ReadFromNetStream(ref NetStream );

        richTextBox1.AppendText("DELE "+number.ToString()

+"命令應答:"+back+"/r/n"); }}

5 結束語

把郵件發送模塊和郵件接收模塊合起來,就成為一個電子郵件的客戶端程序。在實際應用中,在上面基礎上加以改進,如果再進一步結合數據庫技術,這可以開發出易用、可靠的電子郵件的客戶端程序。

(收稿日期:2004-02-25;電子郵件:zhouhuaqing@peoplemail.com.cn)

 

Programming e-mail client with c#.net

Abstract: Develop a program for e-mail client on the flat of .net with C#. C# is a new language of visual studio .net , is modern, object-oriented and is safe in type. Realize the network correspondence depending Socket programming. Expatiate the principle of SMTP(Simple Mail Transfer Protocol) and POP3(Post office Protocol), then explain developing a program to send e-mail according to the SMTP agreement development E-mail mail customer and carry to receive the procedure developing a program to receive e-mail according to the POP3 in detail.

Key Words: Socket; Simple Mail Transfer Protocol; Post Office Protocol

參 考 文 獻

[1]謝希仁. 計算機網絡. 第2版. 北京:清華大學出版社,1999

[2]Charles Petzold. Windows程序設計. 第5版. 北京:北京大學出版社,1999

[3]Anthony Jones 和 Jim Ohlund.  Windows網絡編程. 第2版. 北京:清華大學出版社,2002 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人高清激情视频在线观看| 日韩免费看的电影电视剧大全| 国产欧美亚洲视频| 亚洲国产成人精品女人久久久| 26uuu亚洲伊人春色| 色综合久久久久久中文网| 欧美亚洲成人网| 久久久人成影片一区二区三区观看| 国产拍精品一二三| 久久精品视频亚洲| 久久在线视频在线| 精品国产一区二区三区久久狼黑人| 中文字幕综合一区| 久久久久久久久久久免费精品| 丰满岳妇乱一区二区三区| 国产成人精品一区| 亚洲综合日韩在线| 亚洲欧洲在线视频| 91精品综合视频| 欧美一级淫片videoshd| 欧美午夜宅男影院在线观看| 成人两性免费视频| 日韩电影在线观看永久视频免费网站| 欧美日韩国产精品一区| 日韩成人小视频| 国产精品免费观看在线| 亚洲电影中文字幕| 欧美尤物巨大精品爽| 黑人精品xxx一区一二区| 久久免费福利视频| 亚洲va欧美va国产综合久久| 992tv成人免费影院| 亚洲色图25p| 国产精品国产三级国产aⅴ9色| 亚洲色在线视频| 成人免费看吃奶视频网站| 欧美日韩黄色大片| 国产三级精品网站| 国产日本欧美视频| 亚洲国产欧美一区二区丝袜黑人| 欧美高清第一页| 欧美福利视频在线观看| 日韩亚洲成人av在线| 久久国产加勒比精品无码| 欧美性猛交xxxx| 91在线视频导航| 精品久久久国产精品999| 成人做爰www免费看视频网站| 青草热久免费精品视频| 国产色婷婷国产综合在线理论片a| 亚洲精品小视频在线观看| 欧美精品在线播放| 日韩欧美精品免费在线| 国产精品亚洲激情| 亚洲成人999| 97精品伊人久久久大香线蕉| 日韩av在线免费观看一区| 亚洲另类欧美自拍| 亚洲aa在线观看| 色哟哟亚洲精品一区二区| 国产精品久久久久久久久免费看| 日产精品99久久久久久| 欧美成人亚洲成人| 尤物tv国产一区| 69av在线视频| 亚洲精品视频中文字幕| 日韩成人在线免费观看| 成人性生交xxxxx网站| 亚洲国产精品推荐| 欧美国产精品va在线观看| 成人免费在线网址| 亚洲japanese制服美女| 91精品视频大全| 在线亚洲欧美视频| 亚洲免费视频一区二区| 国产精品欧美日韩一区二区| 国产精品日韩在线一区| 成人夜晚看av| 色狠狠久久aa北条麻妃| 国产自摸综合网| 亚洲国产精品va在线看黑人| 国产亚洲欧美aaaa| 亚洲欧美中文字幕| 日韩美女视频在线观看| 久久国产精品影片| 久久久久久久久爱| 国产精品视频不卡| 日韩欧美亚洲范冰冰与中字| 欧洲美女7788成人免费视频| 国产日韩欧美电影在线观看| 人人爽久久涩噜噜噜网站| 欧美精品videos性欧美| 久久久久久69| 深夜福利亚洲导航| 欧美视频在线观看免费网址| 97**国产露脸精品国产| 日韩综合中文字幕| 日韩av影院在线观看| 91精品成人久久| 国产美女精品视频| 欧美精品一区三区| 中文字幕亚洲第一| 欧美另类老肥妇| 在线视频一区二区| 欧美日韩电影在线观看| 国产精品视频中文字幕91| 欧美日韩高清在线观看| 欧美日韩国产色| 国产日韩中文字幕| 亚洲影视九九影院在线观看| 欧美一区二区大胆人体摄影专业网站| 日韩一区二区三区xxxx| 日韩一区av在线| 日韩中文在线观看| 国产精品视频午夜| 91系列在线播放| 国产精品吹潮在线观看| 日韩av快播网址| 一本色道久久88亚洲综合88| 九九热精品视频国产| 亚洲香蕉伊综合在人在线视看| 插插插亚洲综合网| 日韩精品在线播放| 成人av.网址在线网站| 免费不卡欧美自拍视频| 国产中文日韩欧美| 97婷婷涩涩精品一区| 久久久久久久久久av| 日韩在线观看免费全| 欧美第一黄网免费网站| 国产精品视频区| 深夜福利日韩在线看| 午夜精品久久久久久久99黑人| 91高清免费视频| 久久精品99久久久香蕉| 久久99久久久久久久噜噜| 91久久国产综合久久91精品网站| 亚洲欧美成人网| 国产欧美最新羞羞视频在线观看| 国产精品劲爆视频| 亚洲区中文字幕| 国产精品视频免费观看www| 久久精品视频中文字幕| 国产精品人成电影| 91av视频在线观看| 国产精品久久久久久久久久小说| 在线观看日韩www视频免费| 国产精品久久77777| 欧美高跟鞋交xxxxhd| 97色在线视频观看| 日韩电影中文字幕在线观看| 国产精品扒开腿爽爽爽视频| 欧美插天视频在线播放| 中文字幕亚洲欧美在线| 国产亚洲激情视频在线| 欧美精品激情在线观看| 欧美一区视频在线| 久久精品男人天堂| 亚洲已满18点击进入在线看片| 国产一区二区三区在线播放免费观看| 欧美在线一级视频| 国产精品永久免费观看| 亚洲综合在线小说| 亚洲爱爱爱爱爱|