用C語言設(shè)計(jì)電子郵件系統(tǒng)_第1頁
用C語言設(shè)計(jì)電子郵件系統(tǒng)_第2頁
用C語言設(shè)計(jì)電子郵件系統(tǒng)_第3頁
用C語言設(shè)計(jì)電子郵件系統(tǒng)_第4頁
用C語言設(shè)計(jì)電子郵件系統(tǒng)_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1 1 2 2 3 3 3 4 4 4 5 6 6 14 14 14 20 20 27 28 28 29 29 32 32 32 34 35 36各類信號的傳送、接收、存貯等處理,將郵件送到世界的各個(gè)角落。到目前為止,可以說電子郵件是Internet資源使用最多的一種服務(wù),E-m傳遞文件、聲音及圖形、圖像等不同類型的信息。方的信箱內(nèi),且存儲在對方的電子郵箱中。接收者可在他認(rèn)為方便的時(shí)候讀取信件,不受是通過郵件服務(wù)器(mai1server)來傳遞檔的。通常mailserver是執(zhí)行多任務(wù)操作系統(tǒng)UNIX的計(jì)算機(jī),它提供24小時(shí)的電子郵件服務(wù),用戶只要向mailserver管理人員申請—個(gè)信箱賬號,就可使用這項(xiàng)快速的郵件服務(wù)。1)電子郵件系統(tǒng)是一種新型的信息系統(tǒng),是通信技術(shù)和計(jì)算機(jī)技術(shù)結(jié)合的電子郵件的傳輸是通過電子郵件簡單傳輸協(xié)議(SimpleMailTransferProtocol,簡稱SMTP)這一系統(tǒng)軟件來完成的,它是Internet下的一種電子郵件通信協(xié)議。2)電子郵件的基本原理,是在通信網(wǎng)上設(shè)立“電轉(zhuǎn)發(fā)、存檔等各種操作。系統(tǒng)功能主要由軟件實(shí)現(xiàn)。3)電子郵件的通信是在信箱之間進(jìn)行的。用戶首先開啟自己的信箱,然后通過鍵可以與另—個(gè)郵件系統(tǒng)進(jìn)行傳遞和交換。收方在取信時(shí),使用特定賬號從信箱提取。當(dāng)前流行的各大郵件客戶端軟件的除了最主要的收發(fā)信件之外,功能越來越復(fù)雜,但是人們平常真正用到的功能很少,很多功能尤其對于那些計(jì)算機(jī)知識相對缺乏的人來說,更加顯得太過于華麗而不太實(shí)用。有鑒于此,在了解RFC底層協(xié)議的基礎(chǔ)上,我們開發(fā)了這個(gè)各種功能相對簡單實(shí)用的郵件客戶端程序,簡化了很多不必要的功能。Microsoft?Windows?XPProfessMicrosoft?DeveloperNetworkforViIntel?Pentium?2及以上處理器,32M以上內(nèi)存,Microsoft?Windows?9X/NT客戶端軟件客戶端軟件附加功能電子郵件的分類管電子郵件編寫電子郵件接收系統(tǒng)電子郵件接收系統(tǒng)簡單郵件發(fā)送通訊簿管理送帶有附件的郵件發(fā)理附加功能電子郵件的分類管電子郵件編寫電子郵件接收系統(tǒng)電子郵件接收系統(tǒng)簡單郵件發(fā)送通訊簿管理送帶有附件的郵件發(fā)理各種錯(cuò)誤的提示收帶有附件的郵件接收簡單郵件接收件的具體實(shí)現(xiàn)方法,也是具體的RFC用代碼實(shí)現(xiàn)的接口與SmtpMail類通過交互操作來實(shí)現(xiàn)用戶發(fā)送信件的操作。由于要開發(fā)的是郵件客戶端程序,就不得不用到SMTP協(xié)議和POP協(xié)議。而我個(gè)人負(fù)責(zé)的是郵件發(fā)送功能的實(shí)現(xiàn),因此就必然會(huì)涉及到SMTP(SimpleMailTransfer法使客戶端與服務(wù)器進(jìn)行交互,以達(dá)到發(fā)送郵件的目的。簡單郵件傳輸協(xié)議(SMTP)的目標(biāo)是可靠高效地傳送郵件,它獨(dú)立于傳送子系統(tǒng)而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。信環(huán)境(IPCE此環(huán)境可以包括一個(gè)網(wǎng)絡(luò),幾個(gè)網(wǎng)絡(luò)或一個(gè)網(wǎng)絡(luò)的子網(wǎng)。理解到傳送通信。郵件是一個(gè)應(yīng)用程序或進(jìn)程間通信。郵件可以通過連接在不同IPCE上的進(jìn)程跨網(wǎng)絡(luò)進(jìn)行郵件傳送。更特別的是,郵件可以通過不同網(wǎng)絡(luò)上的主機(jī)接力式傳送。SMTP設(shè)計(jì)基于以下通信模型:針對用戶的郵件請求,發(fā)送SMTP建立與接收SMTP命令由發(fā)送SMTP發(fā)出,由接收SMTP接收者可以接收郵件則返回OK應(yīng)答。S(但不中止整個(gè)郵件操作雙方將如此重復(fù)多次。當(dāng)接收者收到全部郵件后會(huì)接收到特別的序列,如果接收者成功處理了郵件,則返回OK應(yīng)答。件可以直接由發(fā)送方主機(jī)傳送到接收方主機(jī);或者,當(dāng)兩者不在同一個(gè)傳送服務(wù)下時(shí),目的主機(jī)地址和郵箱名稱。MAIL命令參數(shù)是回復(fù)路徑,它指定郵件從何下面,例子中可以看到哪些使用實(shí)際的命令和應(yīng)答。完整的命令和應(yīng)答在第四節(jié)。這樣SMTP實(shí)現(xiàn)中就將用戶郵箱名稱保留成初始時(shí)的樣子,主機(jī)名稱對大小寫不敏感。似于語言的變量。SMTP命令定義了郵件傳輸或由用戶定義的系統(tǒng)功能。它的命令是由<CRLF>結(jié)束接和<CRLF>連接。郵箱的語法格式必須和接收站點(diǎn)的格式一致。下面討論SMTP和應(yīng)答。特定的命令產(chǎn)生自己的緩沖區(qū),或使一個(gè)或多個(gè)緩沖的內(nèi)容被清除。此命令用于向接收SMTP確認(rèn)發(fā)送SMTP。參數(shù)域包括發(fā)送SMTP的主機(jī)名。接已經(jīng)被子清除。此郵箱是由在表中的主機(jī)一一傳遞發(fā)送(第一個(gè)主機(jī)是最后一個(gè)接收到此郵件的主機(jī))在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果話)清楚的名稱。一些出錯(cuò)信息的回復(fù)路徑可能就是空的?;貜?fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。送,就會(huì)返回如未知本地用戶(550)的信息給用戶。插入目標(biāo)郵件中。例如,由傳遞主機(jī)A接收的帶有如下參數(shù)的郵件時(shí),TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HO將會(huì)變成如下形式:FROM:<@HOSTA.ARPA:USERX@HOSTY.TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.此命令導(dǎo)致它的轉(zhuǎn)發(fā)路徑參數(shù)加入轉(zhuǎn)發(fā)路徑緩沖區(qū)中。返回OK應(yīng)答;如果失敗也必須返回失敗應(yīng)答。戶手中,但在一些情況下,郵件可能需要更進(jìn)一步的加工并由另外的郵件系統(tǒng)傳送。體信息。種情況下。在這種情況下,必須對DATA命令發(fā)送OK應(yīng)答,而接收SMTP組織并發(fā)送一個(gè)"不可傳遞郵件"信息到信息的發(fā)送者。在此信息中或者發(fā)送一個(gè)不令發(fā)送。Return-Path:<@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.個(gè)回復(fù)路徑,此命令如果成功就將郵件發(fā)送到終端上了。在此表起始處,它就必須使用發(fā)送IPCE而不話)清楚的名稱。一些出錯(cuò)信息的回復(fù)路徑可能就是空的?;貜?fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。箱中。對于每個(gè)接收者,如果接收者終端打開,郵件內(nèi)容將被傳送到接收者的終端上,中此命令成功。在此表起始處,它就必須使用發(fā)送IPCE而不話)清楚的名稱。一些出錯(cuò)信息的回復(fù)路徑可能就是空的?;貜?fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。數(shù)域包括回復(fù)路徑,如果成功地將信息送到郵箱中此命令成功。在此表起始處,它就必須使用發(fā)送IPCE而不話)清楚的名稱。一些出錯(cuò)信息的回復(fù)路徑可能就是空的。回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。拋棄,所有緩沖區(qū)和狀態(tài)表應(yīng)該被清除,接收方必須返回OK應(yīng)答。沒有影響。此命令要求接收者確認(rèn)參數(shù)指定了一個(gè)郵件發(fā)送列表,如果是一個(gè)郵件發(fā)送列表,就返回表中的成員。如果這是(已經(jīng)知道的)用戶名,返回用戶的全名和指定的郵箱。此命令對回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。沒有影響。NOOP(NOOP)區(qū)沒有影響。應(yīng)該象接收到暫時(shí)錯(cuò)誤(4XX)一樣假定命令和操作仍在支持之中。并保持自己的角色。如果程序A現(xiàn)在是發(fā)送SMTP,它發(fā)出TURN命令后接收到OK通信信道剛打開一樣,這時(shí)它準(zhǔn)備接收220準(zhǔn)備好服務(wù)信號。若要拒絕改變角色,接收方可以發(fā)送502應(yīng)答。對于這些命令的順序有一定的限制。對話的第一個(gè)命令必須是HELLO命令,此命命令終止。在一個(gè)會(huì)話中可以有一個(gè)或多個(gè)操作。時(shí)接收到的SMTP必須保持在與剛才一致的狀態(tài)下。會(huì)話的最后一個(gè)命令必須是QUIT命令。此命令在會(huì)話的其它時(shí)間不能使用。MAILMailmailMaIl在一些主機(jī)上,"smith"和"Smith"就根本不是一個(gè)用戶。參數(shù)域由不定長的字符串組成,它由<CRLF>結(jié)束,接收方在完全接收到此序列前下面是SMTP命令:HELO<SP><domain><CRLF>MAIL<SP>FROM:<revRCPT<SP>TO:<forward-path><SEND<SP>FROM:<revSOML<SP>FROM:<revSAML<SP>FROM:<revVRFY<SP><string><CEXPN<SP><string><CRLF>NOOP<CRLF>保證了發(fā)送SMTP知道接收SMTP的狀態(tài)。每個(gè)命令必須有且只有一個(gè)響應(yīng)。REPLYCODESBYFUNCTIONG421<domain>服務(wù)未就緒,關(guān)閉傳輸信道(當(dāng)必須關(guān)閉時(shí),此應(yīng)答可以作為對任何命令的響應(yīng))251用戶非本地,將轉(zhuǎn)發(fā)向<forward450要求的郵件操作未完成,郵箱不可用(例如550要求的郵件操作未完成,郵箱不可用(例如說道發(fā)送和接受郵件,我們就必須不得不提RFC因特網(wǎng)文本信件格式的標(biāo)準(zhǔn)”(StandardfortheFormatofARPAInte該標(biāo)準(zhǔn)提供了郵件內(nèi)容的格式和相關(guān)語義。RFC822規(guī)定的電子郵件內(nèi)容全部由ASCII字符組成,就是通常所說的文本文件,因而標(biāo)準(zhǔn)將它稱為Internet文本信件(InternetTe從組織上看,信件內(nèi)容結(jié)構(gòu)分為兩大部分,中間用一個(gè)空白行(只有CRLF符的行)語法分析,提取信件的基本信息。在RFC822中規(guī)定,信件體就是一系列的向收詳述。信頭的結(jié)構(gòu)比較復(fù)雜,信頭由若干信頭字段(headerfield)組成,這些字段為用戶和程序提供了關(guān)于信件的信息。要了解信頭的結(jié)構(gòu)就要弄清楚各種信頭字段。所有的信頭字段都具有相同的語法結(jié)構(gòu),從邏輯上說,包括四部分,字段名(field即字段名必須由除了冒號和空格以外的可打印US—ASCII字符(其值在33和126之間)組成,大多數(shù)字段的字段名稱由一系列字母,數(shù)字組成,中間經(jīng)常插入橫線符。字段名告訴電子郵件軟件如何翻譯該行中剩下的內(nèi)容。字段體可以包括除了CR和LF之外的任何ASCII字符。但是其中的空格,加括號類型的字段有特定的格式。RFC822為信件定義了一些標(biāo)準(zhǔn)字段,并提供了用戶自行定義非標(biāo)每個(gè)字段所包含的信息不同,字段大體可以分為結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段。結(jié)構(gòu)化字段有特定的格式,由語法分析程序檢測。Sender字段就是一個(gè)很是信箱,有一個(gè)離散的結(jié)構(gòu)。展字段,非標(biāo)準(zhǔn)字段、IN—Reply和References等。所有其它字段都是結(jié)構(gòu)化的。紹一些大多數(shù)字段共有的元素。此外,行末的回車換行符CRLF也應(yīng)算是空白符。使用空白符可以對字段進(jìn)行格式化,字段內(nèi)容。在Subject后面的冒號和內(nèi)容之間插入空格字符,會(huì)使字段結(jié)構(gòu)更加清晰。空白符,以便接收軟件進(jìn)行語法分析。解忽略,可以用一個(gè)空格字符代替它們,這樣就什么也不會(huì)破壞??梢詫⒊^80個(gè)字符的信頭字段分為多行,即對于比較長的字段,可以分割成幾行,和至少一個(gè)或多個(gè)空白字符來實(shí)現(xiàn)字段的折疊,第一行后面的行稱為信頭字段的續(xù)行。續(xù)行都以一個(gè)空白符開始,這種方法稱為折疊(folding例如標(biāo)題字段Subject:Thisisatest可以表示為:一行,根據(jù)它的非折疊的形式來分析它的語法與語義。寫稍微復(fù)雜點(diǎn),要視情況而定。比如Subject后面的字段體,其中的大寫可能就是縮寫的專用名詞,不能改動(dòng)。箱地址。創(chuàng)建者對信件的原始內(nèi)容負(fù)責(zé)。如,秘書替經(jīng)理發(fā)信。發(fā)送者對發(fā)送負(fù)責(zé)?;貜?fù)字段。指定應(yīng)當(dāng)把回信發(fā)到哪里。如果有此字段,處理。郵箱地址的列表,地址中間用逗號隔開。也可以使用郵箱地址列表,抄送給多個(gè)人。密件抄送。也可以使用郵箱地址列表,密抄給多個(gè)人。“Fwd:”這樣的前綴。接受字段。是投遞信件的特定郵件服務(wù)器所作的記錄。時(shí),這個(gè)信息很有幫助。注釋字段。用于把一個(gè)注解添加到信件中。格式:Resent-*重發(fā)字段。當(dāng)需要把收到的信件重發(fā)給另一信件所要求的新信頭字段。為避免與以前的字段相混。法與未加前綴的同名字段相同。信件標(biāo)識字段。用于表示一個(gè)信件唯一標(biāo)識,該字段通使用的軟件而定。通常左邊是標(biāo)識符,右邊指定電腦名面的電子郵件地址表中的每個(gè)地址發(fā)送一份消息的副本。在關(guān)鍵字Bcc后給出一個(gè)電子郵件地址表,指定部的To和Cc行以決定信息是直接發(fā)送還是作為盲副本發(fā)送的(有些郵件系統(tǒng)在正文部分附加信息來告訴接收者它是一個(gè)盲副本)。其它接收者不知道有哪些用戶接收到盲副本。到副本的人的列表。字段。事實(shí)上已經(jīng)有許多擴(kuò)展字段被廣泛應(yīng)用,但沒有標(biāo)準(zhǔn)定義。例如:X-LOOP字段X-LOOP字段用來防止郵件的循環(huán)傳送。過濾或郵件列表處理程序,可以給它處理不同的方式處理該信件。的名稱,還包含軟件的版本號。例如軟件名為LittlefoxMailer,版本為V1“X-Mailer:LittlefoxMailerV1.0”加到郵件信頭中去。圖27-2列出了一些在因特網(wǎng)電子郵件中可以找到的普通關(guān)鍵字,以及使用它From發(fā)送方地址To接收方地址Cc復(fù)制副X-Mailer發(fā)送信息所使用的X-Sender發(fā)送方地址的X-Face經(jīng)編碼的發(fā)送方面孔的整個(gè)系統(tǒng)的核心是收發(fā)信件的操作,因此為了方便維護(hù),以后的升級,故將這兩個(gè)最主的話,也可以通過這樣的組件的形式增加到主程序中。這也體現(xiàn)了CSharp這一新的微軟主推語言的方便和高校。而且這樣做也方便了我們小組的程序的順利結(jié)合。調(diào)用某一個(gè)類中的某個(gè)變量成員的方法就是通過命名空間名.類名.變量成員來訪問的,述。字符串,另一個(gè)為服務(wù)器的埠。2)提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流及其實(shí)例NetworkSt此類提供訪問網(wǎng)絡(luò)的基礎(chǔ)數(shù)據(jù)流的方法。其中最基本也是最重要的兩個(gè)方法就是()()時(shí)用到。比如用于ESMTP等錄檢驗(yàn)用的用戶名、密碼,發(fā)送郵件需要的收信址以及主題等等在此不再贅述。1)重載的構(gòu)造函數(shù)SmtpMail()此函數(shù)主要用于在初始化過程中,把用戶選擇的附件的路徑以參數(shù)的形式傳給個(gè)對象中了,方便以后在具體的實(shí)現(xiàn)的過程中的使用。3)得到上傳的附件的文件流GetStream件流,然后再用Write的方法把這些附件的文件流寫入到網(wǎng)絡(luò)中,來作。具體實(shí)現(xiàn)代碼如下所示:privatestringGetStream(stringFilePath){System.IO.FileStreamFileStr=newSystem.IO.FileStream(FilePath,System.Ibyte[]by=newbyte[System.Convert.ToInt32(FileStr.Length)];FileStr.Read(by,0,by.Lenreturn(System.Convert.ToBase64String(by}答碼,否則返回失敗信息。所以要將用戶名和密碼轉(zhuǎn)換成Base64編碼然后再發(fā)給服務(wù)器。此函數(shù)的作用就是把給定的字符串轉(zhuǎn)換成相應(yīng)的Base64編碼的字符串。這個(gè)函數(shù)的作用是把SMTP命令的字符串轉(zhuǎn)換成對應(yīng)的字節(jié)型值(C#中規(guī)定的Write方法只能寫入字節(jié)型的數(shù)據(jù))然后寫入網(wǎng)絡(luò)中,如果操作成功就返回一個(gè)標(biāo)志為如下所示:privateboolSendCom{byte[]WriteBuffer;boolstate=false;WriteBuffer=Encoding.Default.GetBytes(//加入防錯(cuò)機(jī)制,可以有效提高程序運(yùn)行的效率和捕獲出錯(cuò){ns.Write(WriteBuffer,0,WriteBuffer.Lengt}{MessageBox.Show(ex.ToStrin}}privatestringRecvResponse(){byte[]ReadBuffer=newbyte[1024];{StreamSize=ns.Read(ReadBuffer,0,Rea}{MessageBox.Show(ex.ToStrin}if(StreamSize!=0){//將當(dāng)前讀取的信息轉(zhuǎn)換成字符串型然后ReturnValue=Encoding.Default.GetString(ReadBuffer).Substring(0,StreamS}}這個(gè)函數(shù)主要是用于ESMTP服務(wù)器的驗(yàn)證的功能,因?yàn)轵?yàn)證的過程是一個(gè)等待然后又調(diào)用上面的發(fā)送SMTP命令函數(shù)SendCommand以及接受SMTP服務(wù)器響應(yīng)的函數(shù)RecvResponse來實(shí)現(xiàn)的。具體的代碼如下所示:privateboolDialog(stringstr,stringerrstr){boolflag=false;if(str==null||str.Tri{}{stringRRCode=RR.Su//然后用這前三位與哈希表中正確的回應(yīng)碼if(RightCodeHT[RRCode{}{}{}}發(fā)送一組命令主要用于服務(wù)器驗(yàn)證的重載函數(shù)為:privateboolDialog(string[]str,stringerrstr){for(inti=0;i<str.Length;i++){{}}}{{tc=newTcpClient(mailserver,mailserverpo}{MessageBox.Show("連接失敗","}if(RightCodeHT[RecvResponse().Substring(0,3){}//進(jìn)行SMTP驗(yàn)證{SendBuffer[1]="AUTHSendBuffer[2]=Base64Encode(uSendBuffer[3]=Base64Encode(pif(!Dialog(SendBuffer,"SMTP服務(wù)器驗(yàn)證失敗,請核對用戶{if(!Dialog(SendBuffer}if(!Dialog(SendBufferstr,"發(fā)件人地址錯(cuò)誤,//把傳過來的收件人的地址分割然后提交給服for(inti=0;i<SendBuffer.Length;i++){SendBuffer[i]="RCPTTO:<"+address}if(!Dialog(SendBuffer,"收件if(!Dialog(SendBufferSendBufferstr="From:"+Fif(!Dialog(SendBufferstr,"錯(cuò)if(!Dialog(SendBufferstr,"斷開}以上即為發(fā)送不帶附件的郵件SMTP命令用代碼實(shí)現(xiàn)的過程。而調(diào)用顯示關(guān)于對話框的函數(shù)ShellAboutstaticexternintShellAbout(IntPtrhWnd,stringszApp,stringszOtherStuff,Assemblyass=Assembly.GetExecutingAssemblyFileVersionInfomyVersion=FileVersionInfo.GetVersionInfo(ass.Location+"."+myVersion.FileMinorPart+"."+myVersion.CompanyNameSMTP服務(wù)器,SMTP的端口,以及用于ESMTP驗(yàn)證的用戶名和密碼。指定這些發(fā)郵件的必須參數(shù)之后,再回到系統(tǒng)的主界面如下所示:在新建帳號的過程中已經(jīng)指定了郵件地址,和帳號名稱,所以默認(rèn)的以這些參發(fā)送簡單的郵件運(yùn)行界面如下。和簡單的郵件不同之處在于多了發(fā)送附件的功能,軟件模擬FoxMail里面發(fā)送加,刪除,排列圖標(biāo)等功能。運(yùn)行界面如下所示:郵件發(fā)送出去之后,用FoxMail跟蹤接收之后,證明郵件和附件都可以正常接收,具體的FoxMail的接收界面如下所示:所以主要的測試也是圍繞發(fā)送郵件展開的,具體的可以分為以下幾個(gè)方面。來發(fā)送一封郵件的測試。而這個(gè)測試又可以分為以下兩個(gè)方面:正常的接收到發(fā)送的普通的純文本文件。從而很好的驗(yàn)證了,我們的郵件發(fā)送系統(tǒng)支持群發(fā)的功能。本郵件的速度。2)發(fā)送一封帶附件(可以是多附件)的郵件支持對多個(gè)收件人發(fā)送多附件。服務(wù)器發(fā)送郵件的測試,所以不再此贅述??傊?,通過以上的各方面的測試,使我改正了代碼中的許多不合理以及錯(cuò)誤之處,最終也證明了,我們的軟件系統(tǒng)是支持多種服務(wù)器,支持多附件發(fā)送的群發(fā)軟件。和服務(wù)器的交互操作,都封裝了在SmtpMail.dl歸屬于MailSend這個(gè)命名空間了。在力求達(dá)到FoxMail功能的同時(shí),又加了一點(diǎn)個(gè)人單,易操作性,和FoxMail的很完美。[1]SimonRobinson,K.[2]TomArcher.C#技術(shù)內(nèi)幕.[3]沉舟.Microsoft.NET編程語言C#.北京:希望電子出版社2001,3[5]TimParker.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù).[7]電腦編程技巧與維護(hù)雜志社.C#編程技[8]云顛工作室.VisualC#中文版全面剖析.北京:中國水利水電出版社,[9]葉樹華《電子協(xié)議與編程》,《電子郵件格式》,《電子郵件接收》,《mime編碼解/china/msdn/events/webcasts/shared/Webcast/MSDNWebCast.a[14]代繼紅.SMTP認(rèn)證機(jī)制模[15]胡安廷.簡單實(shí)現(xiàn)中文郵件.中國感謝我的父母和親人,沒有您們的包容和支持,就不會(huì)有我的今天。感謝我的導(dǎo)師葉樹華老師,為我們提供豐富的材料,指導(dǎo)我們完成畢業(yè)設(shè)計(jì)。感謝我的班主任李玲老師,無論在學(xué)習(xí)上還是生活上,都給予我莫大鼓勵(lì)和幫助。感謝張建華老師,給我講解了許多CSharp的知感謝CSDN技術(shù)論壇的人們,幫我解決了很多技術(shù)性的難題。感謝412的全體室友們,我們一起走過的日子,我感覺充實(shí)又快樂。想象的那么美好,使我看到自己的不足,也使我積累到了經(jīng)驗(yàn)。作戰(zhàn)的你們。感謝NBA中一樣為了生存和夢想而奮斗者的球員們,為我?guī)砭实谋荣?,激?lì)著我追尋自己的夢想。感謝我在中北大學(xué)的四年里,所經(jīng)歷的一切,無論我走到哪里,我都會(huì)記得這是我生命中不可或缺<F6>:將光標(biāo)在編輯窗口和、信息窗口之間切換<Ctrl>+<Break>:終),),<Ctrl>QY:刪除從光標(biāo)位置到行‘XXX’declarebutneverused變量XXX已定義但從未用過?!甔XX’isassignedavaluewhichisneverused變量XXX已賦值但從未用過。Codehasnoeffect程序中含有沒有實(shí)際作用的代碼。Non-portablepointerconversion不適當(dāng)?shù)闹羔樲D(zhuǎn)換,可能是在應(yīng)該使用指針的地方用了一個(gè)非0的數(shù)值。Possibleuseof‘XXX’beforedefinition表達(dá)式中使用了Redeclarationof‘main’一個(gè)程序文件中主函數(shù)main不止一個(gè)。Suspiciouspointerconversion可疑的指針轉(zhuǎn)針。Unreachablecode程序含有不能執(zhí)行到的代碼。Compoundstatementmissing}infunctionmaiCaseoutsideofswitchcase不屬配對所致。Casestatementmissing‘:’switch結(jié)構(gòu)中的某個(gè)case之后缺少冒號。Constantexpressionrequired定義數(shù)組時(shí)指定的數(shù)組長度不是常量表達(dá)式。Declarationsyntaxerror結(jié)構(gòu)體或聯(lián)合類型的定義后缺少分號。Declarationwasexpected缺少說明,通常是因?yàn)槿鄙俜纸绶缍禾?、分號等所引起的。DefaultoutsideswitchDefault部分放到了switc配而引起的。dostatementmusthavewhiledo語句中缺少相應(yīng)的while部分。Expressionsyntax表達(dá)式語法錯(cuò)。如表達(dá)式中含有兩個(gè)Extraparameterincall‘fun’調(diào)用函數(shù)fun時(shí)給出了多余的實(shí)參。Functionshouldreturnavalue函數(shù)應(yīng)該返回一個(gè)值,否則與定義時(shí)的說配。Illegaluseofpointer指針被非法引用,一般是使用了非法的指針運(yùn)算。Invalidpointeraddition指針相加非法。一個(gè)指針(地址)可以和兩個(gè)指針不能相加。Lvaluerequired賦值運(yùn)算的左邊是不能尋址的表達(dá)式。Nomatching表達(dá)式中的括號不配對。Pointerrequiredonleftsideof_>在“_>”運(yùn)算的左邊只能允許一個(gè)指針一般的結(jié)構(gòu)體變量或聯(lián)合類型的變量。Statementmissing;程序遇到了后面沒有分號的語句。Toofewparametersincall調(diào)用某個(gè)函數(shù)時(shí)實(shí)參數(shù)目不夠。UnabletoopeninclUndefinedsymbol‘X’infunctionfu數(shù)名書寫錯(cuò)誤。Abnormalprogramtermination程序異常終止。通常是由于內(nèi)存使用不當(dāng)所致。Nullpointerassignment對未初始化的指針賦值,程序有嚴(yán)重錯(cuò)誤。Userbreak在運(yùn)行程序時(shí)終止。(1)GOtoCursor(<F4>)——選擇該選項(xiàng)使程序首先將光標(biāo)移到某行(一般為可執(zhí)行),選擇該功能項(xiàng),此時(shí)可以查詢變量或表達(dá)式的值。(2)Traceinto(<F7>)——執(zhí)行一此時(shí)程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫到被調(diào)函數(shù)的內(nèi)部。(3)Stepover(<F8>)——執(zhí)行一此時(shí)程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫義函數(shù)當(dāng)作一個(gè)語句執(zhí)行,不跟蹤到函程序的內(nèi)部。程序處于跟蹤狀態(tài)時(shí),可使用該菜單的選項(xiàng)。其主要是使用Evaluate——目的是查詢或更新變量或表達(dá)式的值。區(qū)域:Evaluate域可以輸入一個(gè)含有目前代碼中(程序暫停區(qū)的作用域域中顯示變量或表達(dá)式的值。還可以用Newvalue域進(jìn)行調(diào)試。能估計(jì)出該變量或表達(dá)式的值,則可以將該值輸入到Newvalue域,繼行程序,其目的是肯定錯(cuò)誤發(fā)生處是否在當(dāng)前位置之前。如果輸?shù)闹挡⒊绦蚶^續(xù)執(zhí)行完畢而結(jié)果正確,說明在目前暫停處之前誤而之后無錯(cuò)誤。(5)Break/Watch——用于設(shè)置斷點(diǎn)和監(jiān)視表達(dá)式。變量或表達(dá)式的值?!境R婂e(cuò)誤信息語句索引】Ambiguousoperatorsneedparentheses:不明確的運(yùn)算需要用括Argumentlistsyntaxerror:參數(shù)表語Arrayboundsmissing]infunctioBadfilenameformatinincluBadifdefdirectivesynatax:編譯預(yù)處理ifdef有語法錯(cuò)Badundefdirectivesyntax:編譯預(yù)處理undef有語法錯(cuò)Callofnon-function:Constantoutofrangeincomparison:在比ConversionmayloseConversionofnearpointernotallowed:不Defaultoutsideofswitch:DeDefinedirectiveneedsaFuctiondefinitionoutofplace:函數(shù)定義位置錯(cuò)誤IllegaluseoffloatingIllegaluseofpointer:指針使用ImproperuseofatypedefsymbolIncorrectuseofdefaultInvalidindirectionInvalidpointeradditionIrreducibleexpressiontree無法執(zhí)Macroargumentsyntaxerror宏Macroexpansiontoolong宏的擴(kuò)Mismatchednumberofparametersindefinition定義中參數(shù)個(gè)數(shù)不匹配Misplacedbreak此處不應(yīng)Misplacedcontinue此Misplaceddecimalpoint此處不Misplacedelifdirective不應(yīng)編譯預(yù)處理elifMisplacedelsedirective此處Misplacedendifdirective此處不應(yīng)出現(xiàn)編譯預(yù)處理endifMustbeaddressable必須是Musttakeaddressofmemorylocation必須存儲定位的地址Nodeclarationforfunction'xxx'沒有函數(shù)xNostack缺少堆棧Notypeinformation沒有類型信息Non-portablepointerassignment不可移動(dòng)的指針(地址常數(shù))賦值Non-portablepointercomparison不可移動(dòng)的指針(地址常數(shù))比較Non-portablepointerconversion不可移動(dòng)的指針(地址常數(shù))轉(zhuǎn)換Notavalidexpressionformattype不合法的表達(dá)式格式Notanallowedtype不允許使用的類型Numericconstanttoolarge數(shù)值常太大Outofmemory

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論