freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

一個(gè)smtp客戶端程序的設(shè)計(jì)與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文(完整版)

2025-01-16 11:23上一頁面

下一頁面
  

【正文】 .................................................................................................................... 28 結(jié) 論 ........................................................................................................................ 30 參考文獻(xiàn) ........................................................................................................................ 30 致 謝 ........................................................................................................................ 31 聲 明 ........................................................................................................................ 32 1 引言 隨著信息技術(shù)的發(fā)展、互聯(lián)網(wǎng)的普及,電子郵件已經(jīng)逐漸稱為人們正常工作和生活中進(jìn)行溝通的重要手段。本軟件是為了研究 SMTP 協(xié)議而作的一個(gè)實(shí)驗(yàn)型項(xiàng)目。主要功能就是傳送電子郵件,當(dāng)我們使用郵件程序,郵寄 EMail 給對(duì)方時(shí),必須通過 SMTP 協(xié)議,將郵件發(fā)送到對(duì)方的郵件服務(wù)器上,等待對(duì)方查收。 協(xié)議原理 從 1982 年到現(xiàn)在, SMTP 協(xié)議及其相關(guān)的協(xié)議已經(jīng)發(fā)展成一個(gè)比較完整的體系,不再是建立之初那個(gè)只能傳送文本消息的簡單協(xié)議。其中接收 SMTP 可以是最終接受者也可以是中間傳送者。 圖 1 SMTP工作模型 SMTP 提供傳送郵件的機(jī)制,如果接收方與發(fā)送方連接在同一個(gè)傳送服務(wù)器時(shí),郵件可以直接由發(fā)送方 主機(jī)傳送到接收方主機(jī);或者,當(dāng)兩者不在同一個(gè)傳送服務(wù)器時(shí),通過中繼 SMTP 服務(wù)器傳送。當(dāng)指定一般的命令或應(yīng)答格式后,參數(shù)會(huì)由一些類似于語言的字符串表示出來,如 string> 或 reversepath> ,這里尖括號(hào)表示這是一種類似于語言的變量。 MAILSPFROM:reversepathCRLF 此命令告訴接收者新的發(fā)送操作已經(jīng)開始,請(qǐng)復(fù)位所有狀態(tài)表和緩沖區(qū)。 forwardpath>不僅包括郵件,它是主機(jī)和目的郵箱的路由表,在其中的第一個(gè)主機(jī)就是接收命令的主機(jī)。如果此命令被接收,接收方返回一個(gè) 250 OK 應(yīng)答。 打開與退出 想進(jìn)行郵件的發(fā)送,就要有一對(duì)用于傳送信息的通道。以下的命令是用于打 開和關(guān)閉的: HELO < SP> < domain> < CRLF> QUIT < CRLF> 在 HELLO 命令中,主機(jī)自己發(fā)送命令,此命令可以被解釋為:“你好,我是XX” 打開連接的例子: R: 220 Simple Mail Transfer Service Ready S: HELO xx R: 250 關(guān)閉聯(lián)結(jié)的例子 S: QUIT R: 221 Service closing transmission channel 從整個(gè) SMTP 協(xié)議的工作過程來看,整個(gè)過程很類似于一對(duì)朋友的談話,首先要由客戶端的朋友先向服務(wù)器端開口說 HELO,然后服務(wù)器端回答它的話。因此, 制定 出了 一系列的相關(guān)協(xié)議 來滿足人們?nèi)找孀兓男枨?。下面給出一個(gè)簡單的例子來說明驗(yàn)證的過程,其中 S代表服務(wù)器 ,C 代表客戶端: S: 220 ESMTP server ready C: EHLO S: S: 250 AUTH LOGIN PLAIN。客戶端發(fā)送 BASE64 編碼后的用戶名。 3 軟件 開發(fā)背景與環(huán)境 軟件 開發(fā)背景 作為計(jì)算機(jī)專業(yè)的學(xué)生,在課堂上學(xué)習(xí)到的僅僅是有關(guān)協(xié)議的理論知識(shí),并沒有分析并運(yùn)用協(xié)議的實(shí)際經(jīng)驗(yàn)。 軟件 開發(fā)環(huán)境 系統(tǒng)環(huán)境 本系統(tǒng)采用的工具軟件有: OS: Windows 2020 Data Center Edition IDE: Visual C++ 企業(yè)版 工具簡介 在本系統(tǒng)中,使用的開發(fā)工具為 Visual C++ 企業(yè)版。 當(dāng)然它的作用不僅僅如此。目前很多的工具都自帶了幫助文檔,但微軟的 MSDN 確實(shí)作的非常出色。 根據(jù)以上分析,需要進(jìn)行編碼的操作有: 1) 從圖形界面獲取輸入的數(shù)據(jù)的操作。下面與流行的兩種平臺(tái)做比較并說明選擇 VC++的原因: 整個(gè)工程使用 JAVA 平臺(tái) 從誕生至今,一路走來 JAVA 可以說是一帆風(fēng)順。其類庫并且提供了大量的有關(guān)網(wǎng)絡(luò)操作 API,讓用戶能夠方便的使用并獲得所求的值。在本軟件構(gòu)過程中,定義了 CSMTP、 CMailMessage、 CMIMEMessage、 CBASE64 四個(gè)工具類,給程序使用。對(duì)于 SMTP的分析以及發(fā)送時(shí)發(fā)送端與接收端之間的會(huì)話,均由此類完成。在該軟件中該值為 25。 成員函數(shù) 說明: 1) private BOOL GetResponse(UINT responseExpected):該方法根據(jù)獲取的 UINT 類型的參數(shù) responseExpected 來判斷所進(jìn)行的操作是否正確 。 4) public UINT GetPort():獲取服務(wù)器的端口號(hào)。如果是預(yù)期的數(shù)據(jù)那么返回 TRUE,標(biāo)志發(fā)送成功;如果返回 FALSE,標(biāo)志發(fā)送失敗。如果查表成功,返回一個(gè)合適 的出錯(cuò)信息;如果查表失敗,則返回未知錯(cuò)誤。 2) public CString m_AttachmentString:表示附件文件的名稱,在給該類的對(duì)象添加有關(guān)的附件信息的時(shí)候 使用。在 SMTP 協(xié)議中規(guī)定:一封郵件可以有多個(gè)接收者,每個(gè)接收者需要一個(gè) RCPT TO 命令與之對(duì)應(yīng)。參數(shù)是接收者的類型,默認(rèn)值是 TO 類型,意為普通的接收者。傳遞的參數(shù)為要向郵件添加的頭 信息。并且郵件正文與附件、附件與附件之間要有正確的分隔標(biāo)志。其類圖 如圖 6所示。如果附件添加成功,則返回 TRUE;否則返回 FALSE。表示 BASE64編碼所使用的字符表。參數(shù) szEncoding 表示要進(jìn)行編碼的數(shù)據(jù)源,而參數(shù)int nSize 表示要進(jìn)行編碼的長度。 實(shí)現(xiàn)軟件的界面類 方便的用戶界面是用戶能夠方便操作最基本保證。使用該類定義的全局對(duì)象會(huì)由 MFC的框架自動(dòng)傳遞給隱藏的方法。它與用戶直接進(jìn)行交互,該界面是否友好,直接影響到用戶體驗(yàn)。而如果在存在附件的情況下, CMailMessage類型的消息則會(huì)包含一個(gè) CMIMEMessage 類型的附件。 //創(chuàng)建連接,成功繼續(xù)執(zhí)行,失敗則返回。接下來的工作就是傳送數(shù)據(jù)了。否則返回錯(cuò)誤。 sTemp = _T(\r\n.\r\n)。關(guān)于郵件的正文部分,并沒有在上述部分說明。 i++){ thisGetRecipient(sEmail,sFriendly,i)。 //format is : Sun, 14 April 07 11:39 GMT sTemp = _T(Date: )。 AddToHeader(sTemp)。 i++){ CString sContent 。 sContent += ()。到目前為止,我們已經(jīng)把關(guān)于郵件頭和正文均加入到 CMailMessage 的對(duì)象中,當(dāng)想要獲取這些內(nèi)容時(shí)發(fā)個(gè)消息給它就 行了。 BASE64 其實(shí)是一種很簡單的編碼方式,它的原理就是把每三個(gè) ASCII 字符, 共 24 位分解成 4個(gè)字符,每個(gè)字符由原文中的六位。 i+=3,j+=4){ //在循環(huán)內(nèi)即是把 3字符變化為 4個(gè)索引的過程 sTemp += _T((szEncoding[i]amp。 sTemp+=_T((szEncoding[i+2]amp。 sTemp += _T(64) 。 } //使用下面 的循環(huán),根據(jù)得到索引值進(jìn)行查表,用對(duì)應(yīng)的表項(xiàng)生成編碼后的內(nèi)容 for(i=0。測(cè)試的方式采用了黑盒與白盒兩種,并且對(duì)有關(guān)的操作進(jìn)行了邊界分析。 2) 傳遞第二個(gè)源數(shù)據(jù),如: wangyoucao(長度為 3n+ 1)和它的預(yù)期結(jié)果。 按照上述標(biāo)準(zhǔn)對(duì)子模塊進(jìn)行逐個(gè)測(cè)試,盡量的排除軟件模塊的 BUG。如圖 15所示。在本次設(shè)計(jì)中,完成了對(duì) SMTP 協(xié)議的分析,通過本軟件能夠根據(jù)用戶提供的用戶名和密碼向?qū)崿F(xiàn)了 SMTP 協(xié)議的服務(wù)器端發(fā)送郵件。本軟件界面簡單友好,能夠讓用戶快速上手;設(shè)計(jì)良好,模塊劃分清晰、結(jié)構(gòu)工整,具有較強(qiáng)的可擴(kuò)展性;系統(tǒng)性能良好,運(yùn)行速度能夠滿足用戶應(yīng)用。 圖 16 身份 驗(yàn)證失敗 在測(cè)試過程中,出現(xiàn)過一些不符合標(biāo)準(zhǔn)的情況,經(jīng)過修改,都基本與最初的設(shè)計(jì)的目標(biāo)符合,能夠完成正常的功能。 系統(tǒng)測(cè)試:把所有的子模塊統(tǒng)一起來,形成軟件的最初版本。 通過與測(cè)試預(yù)期結(jié)果的比對(duì)即可知,該測(cè)試用例是否能夠通過。根據(jù)得出的結(jié)果來確定子模塊是否能夠通過測(cè)試,如果通過,那么進(jìn)行后繼測(cè)試;如果沒有通過,那么就進(jìn)行代碼的修改,直到能夠通過為止。i++){ thissEncode += CBASE64::base64[(int)sTemp[i]] 。0xfc)2 ) 。} //如果有一個(gè)剩余的字符,那么用兩個(gè) =補(bǔ)足 if(n%3==1) { //j=4,i=3。 sTemp+=_T((szEncoding[i]amp。每個(gè)索引值的范圍都是 0- 63,按照該索引值進(jìn)行查表(表由上述的 64 個(gè)字符組成),找出對(duì)應(yīng)的字符。 在執(zhí)行了有關(guān)封裝郵件內(nèi)容的操作后,會(huì)產(chǎn)生一個(gè)滿足 SMTP 協(xié)議的郵件,其內(nèi)容如圖 13 所示。 sTemp += sContent 。 //添加附件的分隔標(biāo)識(shí)符 (_T(\r\n\r\nBOUNDARY\r\n)\ _T(ContentType: application/octetstream。 charset=\gb2312\\r\n)\ _T(ContentTransferEncoding: base64\r\n\r\n)。 //添加正文格式信息 sTemp = _T(XMailer: )+thisGetMailName()。 sTemp += sFriendly 。與其他內(nèi)容沒什么不同。 //如果接收到的是 SMTP_SERVER_TASK_FINISH 那么就 說明發(fā)送正確, //否則發(fā)送失敗。 this((LPCTSTR)password , ())。方法如下: //首先判斷連接是否已經(jīng)建立 //如果連接已經(jīng)建立,那么就繼續(xù)進(jìn)行下面的操作;否則返回錯(cuò)誤信息 if( !thism_bConnected ) //發(fā)送身份驗(yàn)證命令。 this((LPCTSTR)helloCommand,gth())。整個(gè)軟件就是由這樣的一些類有機(jī)“堆砌”而成。 圖 8 程序主界面 CAboutDlg 類:該類與關(guān)于對(duì)話框相對(duì)應(yīng)。通過隱藏的操作自動(dòng)調(diào)用該類的初始化方法 InitInstance就會(huì)初始化應(yīng)用程序。目前的版本中與界面有關(guān)的類有三個(gè): CMyEMailApp 、 CMyEMailDlg 、 CAboutDlg。 3) char * CBASE64::GetTempSecret(CString sTemp , int amp。 成員 函數(shù) 說明: 1) public DWORD CBASE64::ComputeLen(DWORD size):該方法的作用是計(jì)算編碼后數(shù)據(jù)的長度 。為類的調(diào)用者提供了統(tǒng)一的操作接口。添加到郵件時(shí)使用。在方法中,根據(jù)當(dāng)前添加的郵件附件的個(gè)數(shù)來添加標(biāo)志。根據(jù) SMTP 協(xié)議的規(guī)定,郵件的頭包括: From、 To(可重復(fù)多次 )、 Subject、 Date、 XMailer、 MIMEVersion: 、 Contenttype 等多 個(gè)域。分別代表:普通接收者,抄送和密送。 成員函數(shù)說明: 1) public int AddAttachMent(CString filename):該方法的作用是添加根據(jù)參數(shù)提供的文件名稱,把該文件當(dāng)成附件添加到當(dāng)前的郵件中。對(duì)于每個(gè)域均有一對(duì)對(duì)應(yīng)的存取方法 Get 和 Set 來對(duì)其進(jìn)行操作。 二、 CMailMessage 子模塊:該模塊用于表示郵件的所有內(nèi)容,如:郵件的發(fā)送者、接收者、標(biāo)題、正文以及附件。在 SMTP協(xié)議中規(guī)定 :郵件正文以 DATA命令開始,以“ ”標(biāo)志結(jié)束,為了避免在郵件正文中,出現(xiàn)上述的結(jié)束標(biāo)志,必須在發(fā)送郵件前檢測(cè)郵件,把郵件中所有的與郵件結(jié)束符號(hào)相 同的字 符替換為“ CRLF..CRLF”,來避免在郵件發(fā)送時(shí)出現(xiàn)結(jié)束位置 不明 的錯(cuò)誤。通過該方法,可以根據(jù)SetServerProperties 方法設(shè)置的屬性,連接到指定的服務(wù)器 。如果判斷正確,那么返回 TRUE;否則返回 FALSE。 3) private CString m_nSMTPServerHostName
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1