




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一章 前言 1.1課題來源 當前流行的各大郵件客戶端軟件除了最主要的收發信件之外,功能越來越復雜,但是人們平常真正用到的功能很少,很多功能尤其對于那些計算機知識相對缺乏的人來說,更加顯得太過于華麗而不太實用。有鑒于此,在了解RFC底層協議的基礎上,本人開發了這個各種功能相對簡單實用的郵件客戶端程序,簡化了很多不必要的功能。1.2電子郵件介紹 電子郵件(簡稱E-mail)又稱電子信箱、電子郵政,它是一種用電子手段提供信息交換的通信方式。它是全球多種網絡上使用最普遍的一項服務。這種非交互式的通信,加速了信息的交流及數據傳送,它是一個簡易、快速的方法。通過連接全世界的Internet,實現各類信號
2、的傳送、接收、存儲等處理,將郵件送到世界的各個角落。到目前為止,可以說電子郵件是Internet資源使用最多的一種服務,E-mail不只局限于信件的傳遞,還可用來傳遞文件、聲音及圖形、圖像等不同類型的信息。 電子郵件不是一種“終端到終端”的服務,是被稱為“存儲轉發式”服務。這正是電子信箱系統的核心,利用存儲轉發可進行非實用時通信,屬異步通信方式。即信件發送者可隨時隨地發送郵件,不要求接收者同時在場,即使對方現在不在,仍可將郵件讀取信件,不受時空限制。在這里,“發送”郵件意味著將郵件放到收件人的信箱中,而“接收”郵件則意味著從自己的信箱中讀取信件,信箱實際上是由文件管理系統支持是一個實體。因為電
3、子郵件是通過郵件服務器(mailserver)來傳遞的。通常mailserver是執行多任務操作系統UNIX的計算機,它提供24小時的電子郵件服務,用戶只要向mailserver管理人員申請一個信箱賬號,就可使用這項快遞的郵件服務。1.3電子郵件的工作原理: 電子郵件的發送是通過電子郵件簡單傳速協議(SimpleMailTransferProtocol,簡稱SMTP)來完成的,電子郵件的接受是通過POP3協議來實現。它是Internet下的一種電子郵件通信協議。電子郵件的基本原理,是在通信網上設立“電子信箱系統”,它實際上是一個計算機系統。系統的硬件是一個高性能、大容量的計算機。硬盤作為信箱的
4、存儲介質,在硬盤上為用戶分一定的存儲空間作為用戶的“信箱”,每位用戶都有屬于自己的一個電子信箱。并確定一個用戶和用戶可以隨意修改的口令。存儲空間包含存放所收信件、編輯信件以及信件存盤三部分空間,用戶使用口令開啟自己的信箱,并進行發信、讀信、編輯、轉發、存檔等各種操作。系統功能主要由軟件實現。1.4開發環境及運行環境開發環境AMDAthlom(TM),512內存,80G硬盤Microsoft()WindowsXPProfessionalMicosoftVisualStudio2003(CSharp)MicosoftDeveloperNetworkforVisualStudio.NET20031.
5、4.2運行環境 Internetpentium2及以上處理器,32M以上內存,4G以上硬盤 Micosoftwindows9X/NT操作系統 800*600或以上的屏幕分辨率 確保機器上安裝有.NetFrameWork1.0或者以上版本第二章 系統需求分析2.1系統功能需求分析 電子郵件系統需求實現的功能包括新建用戶的帳號,接受簡單郵件或帶附件的郵件,發送簡單郵件或發送帶附件的郵件,電子郵件編號,電子郵件分類管理,通信薄管理。為了使用通信薄,于是添加了對用戶資料的增加,修改,取消操作。軟件的總體架構發送郵件接收主要功能選擇主界面用戶 圖 1 軟件構架圖 系統功能通訊薄管理客戶端軟件電子郵件接收
6、系統電子郵件接收系統附加功能各種錯誤的提示簡單郵件接收帶有附件的郵件接收簡單郵件發送帶有附件的郵件發送電子郵件編寫電子郵件的分類管理 圖2 系統功能圖系統總體用例圖用戶新建帳號發送郵件純文本郵件帶附件郵件接收郵件 圖3 系統總體用例圖2.2 數據庫需求分析在對系統進行系統需求分析的基礎上,可以得到系統在處理數據時會用到下面所示的數據項和數據結構:1)用戶信息:帳號名稱,用戶名,密碼,電子郵箱地址,SMTP服務器,SMTP端口號,POP3服務器,POP3端口號。2)通信薄信息:姓名,郵箱地址,電話號碼,QQ號,手機號碼,通信地址。第三章 系統設計3.1系統的流程設計郵件客戶端最重要的兩個功能就是
7、接收郵件和發送郵件,其中接收郵件的流程圖如圖4所示。從流程圖中可以看出,接收郵件時首先要創建一個TCP連接到POP3服務器。如果連接不成功就退出執行,連接成功后再發送USER和PASS命令進行身份驗證,身份驗證通過后再通過STAT命令獲得要接收的郵件數,當郵件數大于0時,通過RETR命令逐個接收郵件。接收郵件完畢后,檢查帳號中是否保留服務器上的郵件設置,如果是就不作任何操作,否則從服務器上刪除已經接受的郵件。最后關閉連接。完成郵件接收。開始連接服務器連接成功?登錄服務器登陸成功獲得郵件數目郵件數0接受全部的郵件保留服務器上的郵件?刪除郵件關閉連接退出 圖4 接收郵件流程圖 發送郵件的流程圖,先
8、檢查“發信箱”目錄中是否有待發郵件,如果有就逐個發送這些郵件,流程圖如圖5所示。其發送過程,首先需要創建一個TCP連接,連接到SMTP服務器,如果連接不成功就退出程序。連接成功后發送USER和PASS命令進行身份驗證。身份驗證通過后發送郵件,如果發送成功就關閉連接,更新數據庫,完成郵件發送任務。開始檢查發信箱中的待發郵件待發郵件?連接服務器連接成功SMTP服務器需要身份驗證?身份驗證身份驗證成功?發送待發郵件發送成功關閉連接更新數據庫獲得下一個郵件退出 圖5 發送郵件流程圖3.2 SMTP協議的研究由于要開發的是郵件客服端程序,就不得不用到SMTP協議和POP協議。而我個人負責的是郵件發送功能
9、的實現,因此就必然會涉及到SMTP(SimpleMailTransferProtocol)協議。SMTP被用來在因特網上發送郵件,該協議規定了一些基本的命令和方法使客服端與服務器進行交互,以達到發送郵件的目的。SMTP介紹簡單郵件傳輸協議(SMTP)的目標是可靠高效地傳送郵件,它獨立于傳送子系統而且僅要求一條可以保證傳送數據單元順序的通道。SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務器提供了進程間通信環境(IPCE),此環境可以包括一個網絡,幾個網絡或一個網絡的子網。理解到傳輸送系統(或IPCE)不是一對一的是很重要的。進程可能直接和其它進程通過已知的IPCE通信。郵件是一個應
10、用程序或進程間通信。郵件可以通過連接在不同IPCE上的進程跨網絡進行郵件傳送。更特別是,郵件可以通過不同網絡上的主機接力式傳送。SMTP模型SMTP設計基于以上通信模型:針對用戶的郵件請求,發送SMTP建立于接收SMTP之間建立一個雙向傳送通道。接收SMTP可以是最終接收者也可以是中間傳送者。SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方面傳送。一旦傳送通道建立,SMTP發送者發送MAIL 命令指明郵件發送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCRT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收
11、應答(但不中止整個郵件操作),雙方將如此重復多次。當接收者到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答。SMTP提供傳送郵件的機制,如果接收方與發送方連接在同一個傳送服務下時,郵件可以直接由發送方主機傳送到接收方主機;或者,當兩者在不同一個傳送服務下時,通過中繼SMTP服務器傳送。為了能夠對SMTP服務器提供中繼能力,它必須擁有最終目的主機地址和郵箱名稱。MAIL命令參數是回復路徑,它指定郵件從何處來;而RCPT命令的參數是轉發路徑的,它指定郵件向何處去。向前路徑是源路徑,而回復路徑是返回路徑(它用于發生錯誤時返回郵件)。當同一個消息要發往不同的接收者時,SMTP遇
12、到了向不同接收者發送同一份數據的復制品的問題,郵件命令和應答有一個比較奇怪的語法,應答也有一個數字代碼。在下面,例子中可以看到哪些使用實際的命令和應答。完整的命令和應答在第四節。命令與應答對大小寫不敏感,也就是說,命令和應答可以是大寫,小寫或兩者的混合,但這一點對用戶郵件名稱卻不一定是對的,因為有的主機對用戶名大小寫是敏感的。這樣SMTP實現中就將用戶郵箱名稱保留成初始時的樣子,主機名稱對大小寫不敏感。命令與應答由ASCII字母表組成,當傳送服務提供8位子節傳送通道,每7位字符正確傳送,而最高位被填充為0。當指定一般的命令或應答格式后,參數會由一些類似于語言的字符串表示出來,如“”或“”,這里
13、尖括號表示這是一種類似于語言的變量。3.3 SMTP協議的命令和應答SMTP協議的命令SMTP命令定義了郵件傳輸或用戶定義的系統功能。它的命令是由結束的字符串。而在帶有參數的情況下,命令本身由和參數分開,如果未帶參數可以直接和連接。郵箱的語法格式必須和接收站點的格式一致。SMTP的應答碼對SMTP命令的響應是多樣的,它確定了在郵件傳輸過程中請求和處理的同步,也保證了發送SMTP知道接收SMTP的狀態。每個命令必須有且只有一個響應。SMTP響應由三位數字組成,其后跟一些文本。數字幫助決定下一個應該進入的狀態,而文本對人是有意義的。三位的響應已經包括了足夠的信息,不用再閱讀文本,文本可以直接拋棄或
14、者傳遞給用戶。特別的是,文本是與接收和環境相關的,所以每次接收到的文本可能不同。正規的情況下,響應由下面序列構成:三位的數字,,一行文本和一個,或者也可以是一個多行響應。只有EXPN和HELP,命令可以導致多行應答,然而,對所有命令,多行響應都是允許的。REPLY CODES BY FUNCTION GROUPS 500格式錯誤,命令不可識別(此錯誤也包括命令行過長)第四章RFC822說到發送和接收郵件,就不得不提RFC822了。RFC822的全稱是“ARPA因特網文信件格式的標準”(Standard for the Format of ARPA Internet Text Messages)
15、。該標準提供了郵件內容的格式和相關語義。4.1 RFC822簡單介紹RFC822規定的電子郵件內容全部由ASCII字符組成,就是通常所說的文本文件,因而標準將它稱為Internet文本信件(Internet Text Messages)。從直觀上看,信件非常簡單,就是一系列由ASCII字符組成的文本行,每一行以回車換形符結束。從組織上看,信件內容結構分為兩大部分,中間用一個空白行(只有CRLF符的行)來分隔。第一部分稱為信件的頭部,包括有關發送方、接收方、發送日期等信息。第二部分稱為信件的體部,包括信件內容的正文文體。信頭是必需的,信體是可選的,即信體可有可無。如果不存在信體,用作分隔的空白行
16、也就不需要。在信體中,也可以有用作分隔的空白行。這樣設計的信件便于進行語法分析,提取信件的基本信息。在RFC822中規定,信件體就是一系列的向收信人表達信息的文本行,比較簡單,可以包括任意文本。并沒有附加的結構。信件頭則具有比較復雜的結構,在下一小節中詳述。4.2信件的頭部信頭一般格式信頭的結構比較復雜,信頭由若干信頭字段(header field)組成,這些字段為用戶和程序提供了關于信件的信息。要了解信頭的結構就要弄清楚各種信頭字段。所有的信頭字段都具有相同的語法結構,從邏輯上說,包括四部分,字段名(field name)緊跟冒號“:”(colon),后跟字段體(field body),最后
17、以回車換形符(CRLF)終止。即信頭字段=字段名:字段體CRLF字段名必須由除了冒號和空格以外的可打印USASCII字符(其值在33和126之間)組成,大多數字段的字段名稱由一系列字母,數字組成,中間經常插入橫線符。字段名告訴電子郵件軟件如何翻譯該行中剩下的內容。字段體可以包括除了CR和LF之外的任何ASCII字符。但是其中的格式的空格,加括號的注釋,引號和多行都比較復雜,另外,字段體的語法和語義依賴于字段名,每個類型的字段有特定的格式。結構化字段和非結構化字段每個字段包含的信息不同,字段大體可以分為結構化字段和非結構化字段。結構化字段有特定的格式,由語法分析程序檢測。Sender字段就是一個
18、很好的例子,它的字段內容是信箱,有一個離散的結構。非結構化的字段含有任意的數據,沒有固定格式。例如,Subject字段可以含有任意的文字,并且沒有固定格式。非結構化的字段數量較少,只有Subject、Comments、擴展字段、非標準字段、INReply和References等。所有其它字段都是結構化的。4.2.3信頭字段的元素盡管Email信件的總體結構非常簡單,但一些信頭字段的結構是很復雜的。下面介紹一些大多數字段共有的元素。(1)空白符像其它文本文件一樣,空白符包括空格符(ASCII碼32)和制表符TAB(ASCII碼19)此外,行末的回車換形符CRLF也應算是空白符。使用空白符可以對字
19、段進行格式化,增加它的可續性。例如,每個字段間用CRLF來分離,在字段內用空格來分隔字段名和字段內容。在Subject后面的冒號和內容之間插入空格字符,會使字段結構更加清晰。在Email中。空白符的使用并沒有固定的規則,但應當正確地使用,僅在需要時才使用空白符,以便接收軟件進行語法分析。(2)注解注解是由括號括起來的一系列字符,例如,(這份禮物)。注解一般用在非結構化的信頭字段中,沒有語法語義,僅為人提供了一些附加的信息。如果在加引號的字符串中包括在括號中的字符,那是字符串的一部分,不是注解。在解釋信件的時候,會將注解忽略,可以用一個空格字符代替它們,這樣就什么也不會破壞。(3)字段折疊每個信
20、頭字段從邏輯上說應當是一個由字段名、冒號、字段體和CRLF組成的單一的行,但為了書寫與顯示的方便,增加可續行,也為了符號1000/80的行字符數的限制,可以將超過80個字符的信頭字段分為多行,即對于比較長的字段,可以分割成幾行,形成折疊。在結果化和非結構化字段中都允許折疊,第一行后面的行稱為信頭字段的續行。續行都以一個空白符開始,這種方法稱為折疊(folding),例如標題字段Subject:This is a test可以表示為: Subject:This is a test反之,將一個被折疊成多行的信頭字段恢復到它的單行表示的過程叫做去折疊,只要簡單地移除后面跟著空格的CRLF,將折疊空白
21、符CRLF轉換成空格字符,就可以完成折疊。在分析被折疊的字段的語法時,要把一個多行的折疊字段展開為一行,根據它的非折疊的形式來分析它的語法與語義。(4)字段大小寫字段名稱是不區分大小寫的,所以Subject、subject或SUBJECT都一樣。不過字段名稱大小寫有習慣的常用形式,如主題字段的大小寫形式通常為Subject。字段體的大小寫稍微復雜點,要視情況而定。比如Subject后面的字段體,其中的大寫可能就是縮寫的專用名詞,不能改動。(5)擴展字段如果想在信頭中加入RFC822中沒有規定的字段,就需要創建非標準字段。方法非常簡單,只要在自定義的信頭字段名的前面使用X-前綴。RFC822將這
22、種方法稱為擴展字段。事實上已經有許多擴展字段被廣泛應用,但沒有標準定義。例如:XLOOP字段XLOOP字段用來防止郵件的循環傳送。過濾或郵件列表處理程序,可以給它處理的每個信件增加一個XLOOP字段,以后就可以根據這個字段中含有的特別值,判斷一個信件是否被循環傳送。如果確認郵件發生了循環,過濾或郵件列表處理程序就可以用不同的方式處理該信件。XMailer字段XMailer字段用于指示什么樣的程序產生了這個信件,它是使用最廣泛的擴展字段。產生郵件的軟件可以為所有發送的信件增加合適的XMailer字段,該字段不僅含有軟件的名稱,還包含軟件的版本號。例如軟件名為Littlefox Mailer,版本
23、為V1.0,可以將“XMailer:Littlefox Mailer V1.0”加到郵件信頭中去。圖6列出了一些在因特網電子郵件可以找到的普通關鍵字,以及使用它們的目的。 關鍵字 含義 From 發送方地址 TO 接收方地址 Cc 復制副本地址 Date 信息創建日期 Subject 信息主題 ReplyTo 回復地址 XCharset 使用的字符集(通常為ASCII) XMailer 發送信息所使用的軟件 XSender 發送方地址的副本 XFace 經編碼的發送方面孔的圖像整個系統的核心是收發信件的操作,因此為了方便維護,以后的升級,故將這兩個最主要的操作寫成類庫(.dll)的形式,以組件
24、的形式加載到主程序中,而且其它的功能如果需要的話,也可以通過這樣的組件的形式增加到主程序中。這也體現了C Sharp這一新的微軟主推語言的方便和高效。而且這樣做也方便了我們小組的程序的順利結合。第五章 系統實現5.1發送郵件類SmtpMail是發送郵件的核心,類名為SmtpMail,隸屬于命名空間MailSend。封裝了發送郵件的具體實現方法,也是具體的RFC用代碼實現的過程。而用戶通過具體的操作接口,接收與SmtpMail類通過交互操作來實現用戶發送信件的操作。5.1.1主要成員變量說明1)網絡連接類及實例TcpClient tc為TCP網絡服務提供客戶端連接類TcpClient 實例對象t
25、c。TcpClient 類提供了一些簡單的方法,用于在同步阻塞模式下通過網絡來連接、發送和接收流數據。而實例化的過程也是連接SMTP服務器的過程。它的重載方法之一的兩個參數一個為服務器名稱字符串,另一個為服務器的埠。2)提供用于網絡訪問的基礎數據流及其實例NetworkStream ns此類提供訪問網絡的基礎數據流的方法。其中最基本也是最重要的兩個方法就是Write()和Read()方法,至于參數不再次描述。3)一維字符串數組變量FilePath此字符串數組主要用來存放用戶選擇的附件的絕對路徑名,并在發送帶附件的郵件時用到。4)發送郵件所需的基本參數比如用于ESMTP登錄檢驗用的用戶名、密碼,
26、發送郵件需要的收信人,發信人地址以及主題等等在此不再陳述。5.1.2主要成員函數說明 1)重載的構造函數SmtpMail () 此函數主要用于在初始化過程中,把用戶選擇的附件的路徑以參數的形式傳給FilePath。 2)添加附件的函數 AddAttachment 傳給FilePath的路徑,通過這樣一個函數就可以循環的動態的添加到LIST接口的一個對象中了,方便以后在具體的實現過程中使用。 3)得到上傳的附件的文件流 GetStream 由于在網絡中的操作都是以網絡流的形式來實現的,因此先將上傳的附件轉換成文件流,然后再用Write的方法把這些附件的文件流寫入到網絡中,來完成發送附件的操作。具
27、體實現代碼如下所示:/ / 得到上傳附件的文件流 / /附件的絕對路徑 Private string GetStream(string FilePath) Try /新建文件流對象 System.IO.FileStream FileStr =new System.IO.FileStream(FilePath,System.IO.FileMode.Open); Byteby=new byteSystem.Convert.ToInt32(FileStr.Length); FileStr.Read(by, 0, by.Length); FileStr.Close(); Return(System.C
28、onvert.ToBase64String(by); Catch MessageBox.Show(“可能你要打開的文件的屬性是只讀的!”,“請檢查權限”); Return null; 4)將字符串編碼為Base64字符串的函數Base64Encode 由于 ESMTP的LOGIN認證機制是采用Base64編碼,當用戶發出AUTHLOGIN的命令后,服務器返回334的應答碼等待用戶輸入。如果身份確認后服務器返回235的應答碼,否則返回失敗信息。所以要將用戶名和密碼轉換Base64編碼然后再發給服務器。此函數的作用就是把給定的字符串轉換成相應的Base64編碼的字符串。5)發送SMTP命令的函數S
29、endCommand的函數作用是把SMTP命令的字符串轉換成對應的字節型值(C#中規定的Write方法只能寫入字節型的數據)然后寫入網絡中,如果操作成功就返回一個標志為真的布爾型變量,如果操作失敗或者發生異常就返回標志為假的布爾型變量。具體代碼如下所示:/ / 發送SMTP命令 / private bool SendCommand(string str) ByteWriteBuffer; If(str=null |str.Trim=String.Empty) return true; WriteBuffer=Encoding.Default.GetBytes(str); try ns.Writ
30、e(WriteBuffer,0, WriteBuffer.Length); Catch Errmsg=”網絡鏈接錯誤”; Return false; return true; 6)接受服務器應答的函數RecvResponse 它的作用就是從網絡流中讀取服務器返回的字節型的信息,將其轉換成字符串型的變量,然后將其返回,可以通過其返回值來判斷操作是否成功。具體實現代碼如下所示:/ / 接受SMTP服務器回應 / private string RecvResponse() int StreamSize; string ReturnValue=string.Empty; byte ReadBuffer
31、=new byte1024; try StreamSize = ns.Read(ReadBuffer,0, ReadBuffer.Length); catch (Exception ex) MessageBox.Show(ex.ToString(); return “false”; if (StreamSize =0) return ReturnValue; else ReturnValue = Encoding.Default.GetString(ReadBuffer).Substring(0, StreamSize); return ReturnValue; 7)重載的函數Dialog它們
32、的作用是與服務器交互,發送命令并接收回應。不同的是參數是字符串類型的那個函數,每個發送一條命令,并接受服務器的響應,根據響應的信息來判斷交互的結果是否成功。而參數是字符串數組的函數每次發送的是一組命令,用于和服務器的交互,這個函數主要是用于ESMTP服務器的驗證的功能,因為驗證的過程是一個等待然后又輸入的過程,因此將它們放在一個數組中有利于理解和操作。而它們的實現主要是通過調用上面的發送SMTP命令函數SendCommand以及接受SMTP服務器響應的函數RecvResponse來實現的。具體的代碼如下所示: / / 與服務器交互,發送一條命令并接收回應。 / /一個要發送的命令 /如果錯誤,
33、要反饋的信息 private bool Dialog(string str ,string errstr) if (str =null | str.Trim() =”) return true; if (SendCommand(str) string RR = RecvResponse(); if(RR =false”) return false; try string RRCode = RR.Substring(0, 3); if (RightCodeHTRRCode!=null) return true; else if (ErrCodeHTRRCode!=null) errmsg+=(R
34、RCode+ErrCodeHTRRCode.ToString(); errmsg+=enter; else errmsg+=RR; errmsg+=errstr; return false; catch MessageBox.Show(“請檢查附件的大小”); ruturn false; else return false; 發送一組命令主要用于服務器驗證的重載函數為:/ / 與服務器交互,發送一條命令并接收回應。 / private bool Dialog(string str ,string errstr) for (int I = 0;istr.Length;i+) /如果在身份驗證階段
35、有一個不成功,就返回錯誤標志位 if(!dialog(stri,”) errmsg +=enter; errmsg +=enter; return false; /身份驗證全部正確的話,則返回正確標志位 return true; 8)郵件發送程序 SendMail 這是整個程序的核心部分。具體的實現SMTP協議的程序正是通過它一步一步實現并最終實現發送簡單郵件甚至帶附件的郵件的功能,而它的實現是調用以上給出的各個函數的結果。以下就是簡單的通過幾個SMTP命令的格式來實現: private bool SendEmail() /連接網絡 try /建立一個TCP連接 tc=new TcpClien
36、t(mailserver,mailserverport); catch MessageBox.Show(“連接失敗”,”請確認”); return false; /獲取當前流的資料 ns = tc.Getream(); SMTPCodeADD(); /驗證網絡連接是否正確 if(RightCodeHTRecvResponse().Substring(0,3)=null) return false; string SendBuffer; string SendBuffer; /進行SMTP驗證 /具體的SMTP命令與代碼的結合 if(Esmtp) SendBuffernewString4; Se
37、ndBuffer0=”EHLO”+mailserver+enter SendBuffer1=”AUTHLOGIN”+ enter SendBuffer2=Base64Encode(username)+ enter SendBuffer3=Base64Encode(password)+ enterif(!Dialog(SendBuffer,”SMTP服務器驗證失敗,請核對用戶和,密碼。”) return false; else sendBufferstr=”HELO”+mailserver+enter; if(!Dialog(SendBufferstr,”) return false; Send
38、Bufferstr=”MAIL FROM:”+enter; if(!Dialog(SendBufferstr,”發件人地址錯誤,或不能為空“) return false; /把傳過來的收件人的地址分割然后提交給服務器 string split=”,”; string address=Regex.Split(Recipient,split); SendBuffer=new stringaddress.Length; for(int i=0;iSendBuffer.Length;i+) SendBufferi=”RCPTTO:”+enter; if(!Dialog(SendBuffer,”收件人地
39、址有誤”) return false; SendBufferstr=”DATA”+enter; if(!Dialog(SendBuffer,”) return false; SendBufferstr=”From:”+FromName+”+enter; SendBufferstr+=enter+”,”+enter; if(!Dialog(SendBuffer,”錯誤信件信息”) return false; SendBufferstr=”QUIT”+ENTER; if(!Dialog(SendBuffer,”斷開連接時錯誤”) return false; /關閉流對象 ns.Close(); /
40、關閉連接 tc.Close(); FilePath=null; return true; 以上即為發送不帶附件的郵件SMTP命令用代碼實現的過程。5.2接收郵件類5.2.1主要成員變量說明 1)網絡連接類的實例popClient,該實例用于連接POP3服務器。 2)int變量count是用來記錄接收郵件的數目。 3)定義字符串string POPServer,port,login,password 分別代表服務器名,服務器端口號,用戶帳號,用戶密碼。5.2.2主要成員函數說明 1)連接服務器函數connect 在接收郵件前,首先要調用connect()方法連接POP3服務器,并調用GetMes
41、sageCount()方法獲得需要接收郵件的數目。返回值為要接收的郵件數目,如果為0表示郵件沒有接收。其實現的代碼如下所示: public int connect() /連接POP3服務器 OpenPOP.POP3.Utility.Log=true; popClient.Disconnect(); popClient.Connect(POPServer,int,Parse(port); popClient.Authenticate(login,password); /得到郵件總數 count = popClient. GetMessageCount(); msgs.Clear(); return count; 2)接收郵件函數receiveMail 當讀取出郵件總數時,就進行接收郵件操作,同時也進行接收附件。代碼如下所示為: public void receivMail(int beginIndex,int endIndex) /收取郵件 for(int i=beginIndex;icount) index=cou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石油開采與能源技術應用考核試卷
- 玉石的造船與海洋文化考核試卷
- 筆的制造工藝參數優化與生產試驗考核試卷
- 人教版六年級上冊數學《圓的面積》課件
- 教育營銷策略考核試卷
- 肉制品加工業的營銷創新與品牌塑造考核試卷
- 漁業養殖飼料配方優化與效果評估考核試卷
- 感恩節介紹課件
- 煙草批發商區域市場開發考核試卷
- 木制品生產過程中的質量控制點考核試卷
- 2025購銷合同(電子產品)范文
- 基于全生命周期的綠色建筑成本影響因素研究
- 2025年普法知識競賽題庫及答案(共80題)
- 心力衰竭護理查房 課件
- 新型節能型建筑材料的發展方向論文
- 最新班組級安全培訓試卷及答案
- 工程開工令模板
- 10000中國普通人名大全
- 2022更新國家開放大學電大《計算機組網技術》網絡核心課形考任務三及四答案
- 武廣客運專線隧道防排水技術的突破QC成果
- 部編版五年級道德與法治下冊第三單元《百年追夢復興中華》教材分析單元分析
評論
0/150
提交評論