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

正文內(nèi)容

一個(gè)smtp客戶端程序的設(shè)計(jì)與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文-免費(fèi)閱讀

2024-12-31 11:23 上一頁面

下一頁面
  

【正文】 體會(huì) 這次做的項(xiàng)目帶有一定的學(xué)習(xí)目的,在整個(gè)的開發(fā)過程中學(xué)到了很多知識(shí)。 當(dāng)然,本次完成的軟件不是完美無缺的。把所有子模塊鏈接為一個(gè)完整的 系統(tǒng),在整合的過程中可能會(huì)出現(xiàn)許多問題,因此系統(tǒng)測試必不可少。 3) 傳遞第三個(gè)源數(shù)據(jù),如: xiaxia(長度為 3n)和預(yù)期結(jié)果。整個(gè)過程是迭代式的,從最初的版本得到最終的結(jié)果。 } BASE64 的編碼方式流程圖 如圖 14 所示。 sTemp+=_T((szEncoding[i]amp。 sTemp += _T( (szEncoding[i]amp。0x03)4)+((szEncoding[i+1]amp。不足 4 個(gè)字 符的用‘ =’進(jìn)行補(bǔ)齊。 圖 13 郵件格式示例 郵件的編碼方式 目前幾乎所有實(shí)現(xiàn)了 SMTP 協(xié)議的郵件服務(wù)器都要求 發(fā)送者進(jìn)行所謂的身份驗(yàn)證。} //給郵件添加一個(gè)正文結(jié)束符號(hào) CString szFinalBoundary = \r\n\r\nBOUNDARY 。 name=%s\r\n)\ _T(ContentTransferEncoding: base64\r\n)\ T(ContentDisposition: attachment。 CBASE64 base64 。 thisAddToHeader(sTemp) 。 sTemp += _T()。程序流程圖如圖 12 所示。 if( !thisGetResponse(SMTP_SERVER_TASK_FINISH) ){ return FALSE 。 if( !thisGetResponse(AUTH_SUCCESSFULLY) ) //接下來發(fā)送 MAIL FROM: SOURCE命令; //RCPT TO:Destination命令; //DATA 命令,當(dāng) DATA 命令傳送結(jié)束后就是對(duì)郵件內(nèi)容的傳遞。發(fā)送后等待服務(wù)器的回復(fù),如果回復(fù)為 AUTH_OK, //那么繼續(xù)下面的操作,否則返回錯(cuò)誤信息 ( _T(AUTH LOGIN\r\n) ) 。if( !thisGetResponse(SMTP_SERVER_TASK_FINISH) ) 如果在上述過程中沒有出錯(cuò),那么就得到了一條客戶端與服務(wù)器進(jìn)行信息交互的通道。 類的關(guān)系圖如圖 10所示。其對(duì)應(yīng)的對(duì)話框資源如圖 9 所示。定義一個(gè)該類的全局對(duì)象是程序能夠運(yùn)行與否的關(guān)鍵部分。這三個(gè)類均由 IDE環(huán)境的 AppWizard 功能導(dǎo)航完成。length):根據(jù) BASE64 編碼方式的定義,在解碼過程中,要先把要編碼后的數(shù)據(jù)根據(jù) BASE64的對(duì)應(yīng)表變換成編碼時(shí)所得到的中間碼。參數(shù)為編碼前的長度,返回值為編碼后的長度。 四、 CBASE64 子模塊:在 SMTP 的相關(guān)協(xié)議中規(guī)定,對(duì)于身份驗(yàn)證的用戶名、密碼、郵件的正文以及附件的內(nèi)容均要采用 BASE64 的方式進(jìn)行編碼。 2) protected CString m_FileContent、 TCHAR * m_ContentBuffer:保護(hù)成員變量,表示附件所代表的文件的內(nèi)容。所有附件添加結(jié)束后,會(huì)添加一個(gè)為“ BOUNDARY”的結(jié)束符號(hào)。這些域構(gòu)成了郵件頭的信息。對(duì)于后兩個(gè)值,本版本沒有提供支持 。返回值為郵件中已有的附件的個(gè)數(shù)。這設(shè)計(jì)的方式參考了 JAVA 中的 JavaBean 的設(shè)計(jì)模式。該類的設(shè)計(jì)借鑒了 JAVA 中 JavaBean的定義方式,對(duì)私有數(shù)據(jù)進(jìn)行封裝只能通過對(duì)應(yīng)的方法進(jìn)行 存取。當(dāng)郵件發(fā)送到服務(wù)器后,會(huì)自動(dòng)的把郵件正文中的被替換的字符換回為原來的字符,從而保證郵件的正確性。 如果連接成功則返回 TRUE; 否則返回 FALSE。 2) public void SetServerProperties(CString szSMTPServerName , UINT nPort=SMTP_PORT):該方法根據(jù)獲得的字符串類型和 UINT 類型參數(shù)來設(shè)置要連接的服務(wù)器的名稱以及端口號(hào)。例如: 。由于當(dāng)前大多數(shù) SMTP 服務(wù)器都已經(jīng)要求用戶進(jìn)行身份驗(yàn)證,因此在該類中還封裝了對(duì)發(fā)送者身份驗(yàn)證的操作。 各模塊設(shè)計(jì) 實(shí)現(xiàn) SMTP 協(xié)議的 核心類庫 如上所述,目前與 SMTP 協(xié)議有關(guān)的核心類共四個(gè),對(duì)于郵件的所有操作,均封裝在四個(gè)工具類中。如此一來,得不償失。調(diào)用下 JAVA 有關(guān)郵件發(fā)送的類庫,那么整個(gè)的郵件發(fā)送過程就變成了對(duì)少數(shù)幾個(gè)屬性的設(shè)定問題,整個(gè)工程的主要任務(wù)就不再是對(duì) SMTP 協(xié)議的分析,而僅僅是對(duì)有關(guān)界面的設(shè)計(jì)(而且 JAVA 的界面設(shè)計(jì)相對(duì)于其他的可視化來說好像有些不足,目前似乎只有 NetBeans 支持的比較好)。生成滿足SMTP 協(xié)議要求的數(shù)據(jù)。對(duì)本軟件而言,應(yīng)該具備如下功能: 1)可以保存用戶輸入數(shù)據(jù)。例如:提供了工作區(qū)窗口,能夠方便的對(duì)類、文件、資源進(jìn)行視圖化管理;提供了代碼編輯時(shí)的提示功能,在開發(fā)較大的項(xiàng)目時(shí),能夠讓開發(fā)者方便的找到自己想調(diào)用的方法;提供了斷點(diǎn) 機(jī)制,讓程序調(diào)試更加方便 、 快捷;還提供了各種可視化的工程管理工具, 大大提高了開發(fā)效率 。雖然年代久遠(yuǎn),但是到目前為止,仍然是一款經(jīng)典之作,在開發(fā)平臺(tái)的陣營有著重要的地位。 本軟件是為了學(xué)習(xí)目的而開發(fā)出的系統(tǒng),采用 VC++ 作為開發(fā)平臺(tái), C++作為開發(fā)的語言。說明驗(yàn)證成功??蛻舳耸褂?EHLO 命令聲明自己的身份。下面簡單介紹幾個(gè)相關(guān)的協(xié)議: RFC2821 文檔:該文檔是 RFC821 的 較為完整的 版本。接下來客戶端就會(huì)根據(jù)一定的順序,來繼續(xù)的和服務(wù)器朋友進(jìn)行交流,直到雙方談話結(jié)束,客戶端會(huì)主動(dòng)的說 QUIT,表示自己要走了。這條通道就是發(fā)送者和接接收者用戶發(fā)送和接收數(shù)據(jù)的保證。 DATA 命令僅在郵件操作未完成 或源無效的情況下失敗。 3) 過程中的第三步是發(fā)送 DATA 命令。它給出反向路徑以進(jìn)行錯(cuò)誤信息返回。 工作過程 從 SMTP 協(xié)議的整體工作過程來看,客戶端和服務(wù)器是典型的 C/S 結(jié)構(gòu),由客戶端向服務(wù)器發(fā)起連接請(qǐng)求,發(fā)送相關(guān)的命令(也可以說是要求的服務(wù)),等待服務(wù)器的相關(guān)信息。為了能夠?qū)?SMTP 服務(wù)器提供中繼能力,它必須擁有最終目的主機(jī)地址和郵箱名稱。 SMTP 命令由發(fā)送 SMTP 發(fā)出,由接收 SMTP 接收,而應(yīng)答則 反方向傳送。協(xié)議制定者制定了一系 列的相關(guān)協(xié)議,如:有關(guān)認(rèn)證的部分和附件傳送部分等。 SMTP 協(xié)議的目標(biāo)是可靠高效地傳送郵件,它獨(dú)立于傳送子系統(tǒng)而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。目的在于掌握 SMTP 的工作原理,并實(shí)現(xiàn)一個(gè)能夠發(fā)送郵件的完整郵件客戶端。采用電子郵件服務(wù)可以方便快捷的與朋友、同事或合作伙伴進(jìn)行溝通, 傳遞信息。從常規(guī)的郵件發(fā)送過程出發(fā),采用 C++語言在 VC++的平臺(tái)下,借助 VC++ 提供的應(yīng)用程序框架 MFC加以實(shí)現(xiàn)。論文著重對(duì)郵件服務(wù)所使用的 SMTP 協(xié)議進(jìn)行了分析,并根據(jù) ESMTP 協(xié)議的規(guī)定添加了身份驗(yàn)證的功能增加了 郵件服務(wù)的安全性。 EMail。本軟件實(shí)現(xiàn)的是用于發(fā)送郵件的SMTP 協(xié)議。 2 SMTP 協(xié)議概述 協(xié)議簡介 SMTP,簡單郵件傳輸協(xié)議是 Simple Mail Transfer Protocol 的縮寫。郵件可以通 過連接在不同 IPCE(Interprocess Communication Environment)上的進(jìn)程跨網(wǎng)絡(luò)進(jìn)行郵件傳送。以下就以 RFC821 文檔中規(guī)定描述有關(guān)的內(nèi)容。當(dāng)接收者收到全部郵件后就會(huì)收到特別的序列,如果接受者成功處理了郵件,則返回 OK 應(yīng)答。這樣 SMTP 實(shí)現(xiàn)中就將用戶郵箱名稱保留成初始時(shí)的樣子,主機(jī)名稱對(duì)大小寫不敏感。一系列或更多的 RCPT 命令緊跟其后,給出了接收者信息,然后是 DATA命令列出發(fā)送的郵件內(nèi)容,最后郵件內(nèi)容指示符確認(rèn)操作。如果接收者未知,接收方會(huì)返回一個(gè) 550 Failure 應(yīng)答。 注意:郵件內(nèi)容包括如下提示: Date , Subject , From , To 。 S:MAIL FROM: R: 250 OK S: RCPT TO: R: 250 OK S: RCPT TO: R: 550 No such user here S: RCPT TO: R: 250 OK S: DATA R: 354 Start mail input。信道正常被建立或銷毀的時(shí)候,服務(wù)器端和客戶端會(huì)分別依靠命令和應(yīng)答碼來打開或關(guān)閉信道。 圖 3 SMTP協(xié)議規(guī)定的命令關(guān)鍵字 相關(guān)協(xié)議的簡單介紹 電子郵件系統(tǒng)經(jīng)過幾十年的發(fā)展,已經(jīng)形成了較為完善的技術(shù)體系。 RFC2554 文檔: ESMTP( SMTP Service Extension for Authentication),它是對(duì) SMTP 協(xié)議的擴(kuò)展,確切來說是對(duì)于郵件傳輸中有關(guān)身份認(rèn)證部分的規(guī)定。然后繼續(xù)發(fā)送 250 應(yīng)答碼,要求客戶端去進(jìn)行身份驗(yàn)證。(可以把其看成是 822 文檔的全面升級(jí)版本,當(dāng)然這種說法并不準(zhǔn)確,因?yàn)樗鼈児餐c(diǎn)僅僅是都對(duì)內(nèi)容格式進(jìn)行說明。生成一個(gè)能夠向任何實(shí)現(xiàn)了 SMTP 協(xié)議的郵件服務(wù)器發(fā)送郵件的客戶端軟件,服務(wù)器端可以任意選?。▽?shí)現(xiàn) SMTP 協(xié)議即可)。在整個(gè)程序的構(gòu)建時(shí),也是使用了這 個(gè)大名鼎鼎的 Microsoft Foundation Class 框架。除非你是個(gè)只喜歡把代碼都 CO、 CO進(jìn)去的時(shí)間浪費(fèi)者,否則選擇選擇 VC++這樣的 IDE無疑會(huì)對(duì)你有很大的幫助。 4)可以發(fā)送郵件信息(含附件)。 6) 圖形界面編程。 整個(gè)工程使用 C語言實(shí)現(xiàn) 論速度而言,除開低等的匯編, C語言絕對(duì)的獨(dú)占熬頭,并且 C語言的語法簡單,構(gòu)建出的程序結(jié)構(gòu)也清晰。利用其面向?qū)ο蟮奶匦?,在開發(fā)過程中能夠方便的向軟件添加功能。 一、 CSMTP 子模塊:該模塊封裝了有關(guān)郵件發(fā)送過程的操作。 TRUE 表示已連接; FALSE 表示沒有進(jìn)行連接。 6) protected TCHAR* responseBuf:保護(hù)成員變量,用于存放服務(wù)器返回的消息。 3) public CString GetLastError():通過調(diào)用該方法,能夠獲取服務(wù)器返回的錯(cuò)誤信息。本方法的參數(shù) msg 應(yīng)包含就是要發(fā)送的郵件的信息,如發(fā)送的來源、目的地、郵件的題目、發(fā)送時(shí)間、正文內(nèi)容以及附件,均存儲(chǔ)在 msg 對(duì)象中。 8) protected static ResponseCode* GetServerResponseMessage(UINT):該方法的作用是根據(jù)傳遞進(jìn)來的消息碼來返回一個(gè)與消息碼對(duì)應(yīng)的服務(wù)器消息 。 圖 5 CMailMessage類類圖 成員變量 說明 : 1) public CPtrArray m_Attachments:公有成員變量,表示郵件的附件。 m_Recipients:私有成員變量。 2) public int GetAttachmentNum():該方法的作用是獲取當(dāng)前附件的個(gè)數(shù)。szEmailAddress 表示郵件的地址, szFriendlyName 表示名稱。 7) public virtual void PrepareBody():該方法的作用是生成一個(gè)滿足SMTP 協(xié)議的郵件體。使用該類可以根據(jù)提供的文件名讀取出正確的文件,保存文件名和標(biāo)題。sFilename):該方法的作用是根據(jù)傳遞進(jìn)來的參數(shù)文件名,來把本地文件中的內(nèi)容讀取出來,并添加到當(dāng)前附件對(duì)象中。其類圖 如圖 7所示。本方法根據(jù) BASE64 編碼的定義,對(duì)數(shù)據(jù)進(jìn)行了編碼。length 分別為要解碼的數(shù)據(jù)和長度。三個(gè)類的作用如下: CMyEMailApp 類:該類由 CWinApp 繼承而來,具有父類的所有特性。提供了與郵件操作有關(guān)的按鈕等觸發(fā)器并定義了操作的具體處理方式。正如上節(jié)提到的 ,CMyEMailApp 是整個(gè)應(yīng)用程序的入口,在其初始化操作中調(diào)用了 CMyEMailDlg 的相關(guān)方法,生成主界面對(duì)話框。該方法根據(jù)用戶輸入的參數(shù),調(diào)用底層 API連接到服務(wù)器,連接失敗返回 FALSE,連接成功則返回 TRUE。 圖 11 建立與服務(wù)器連接算法流程圖 通過上述操作。 this((LPCTSTR)username , ())。 if(!thisGetResponse(DATA_IMMEDIATE)){ return FALSE。 if( !thisGetResponse(SMTP_SERVER_CLOSE) ){ return FALSE 。 for(int i=0 。} //添 加標(biāo)題 sTemp = _T(Subject: )+thisGetSubject() 。 //定義郵件的分割符號(hào) BOUNDARY sTemp += _T(Contenttype: multipart/mixed。 //根據(jù)郵件附件的數(shù)據(jù)添加附件信息 for(int i=0 。 CBASE64 base64 。 thism_sBody += sTemp 。服務(wù)器在接收到這些消息的時(shí)候就會(huì)自動(dòng)解碼然后進(jìn)行驗(yàn)證。 //以每三個(gè)字符為
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1