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

正文內(nèi)容

一個(gè)smtp客戶端程序的設(shè)計(jì)與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文(編輯修改稿)

2025-01-04 11:23 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 服務(wù)器端可以任意選取(實(shí)現(xiàn) SMTP 協(xié)議即可)。利用該客戶端,用戶可以方便的發(fā)送郵件。 軟件 開發(fā)環(huán)境 系統(tǒng)環(huán)境 本系統(tǒng)采用的工具軟件有: OS: Windows 2020 Data Center Edition IDE: Visual C++ 企業(yè)版 工具簡(jiǎn)介 在本系統(tǒng)中,使用的開發(fā)工具為 Visual C++ 企業(yè)版。這是一個(gè)集成的開發(fā)環(huán)境。由軟件業(yè)巨頭微軟強(qiáng)力推出。雖然年代久遠(yuǎn),但是到目前為止,仍然是一款經(jīng)典之作,在開發(fā)平臺(tái)的陣營(yíng)有著重要的地位。目前的 C++開發(fā)陣地中,有兩套 application framework 是最為著名的,一套是 OWL,另一套是 MFC。 Visual C++支持的正是 MFC 的應(yīng)用框架。在整個(gè)程序的構(gòu)建時(shí),也是使用了這 個(gè)大名鼎鼎的 Microsoft Foundation Class 框架。它使得開發(fā)者能夠把主要的精力都放在程序的邏輯部分,而不必為了那些瑣屑的消息管理和消息傳遞或是消息循環(huán)而大傷腦筋,大大提高軟件的開發(fā)效率。 當(dāng)然它的作用不僅僅如此。支持 MFC 框架只是 Visual C++IDE 的一個(gè)特性而已。作為一款優(yōu)秀的集成開發(fā)環(huán)境,它提供了很多方便開發(fā)的功能。例如:提供了工作區(qū)窗口,能夠方便的對(duì)類、文件、資源進(jìn)行視圖化管理;提供了代碼編輯時(shí)的提示功能,在開發(fā)較大的項(xiàng)目時(shí),能夠讓開發(fā)者方便的找到自己想調(diào)用的方法;提供了斷點(diǎn) 機(jī)制,讓程序調(diào)試更加方便 、 快捷;還提供了各種可視化的工程管理工具, 大大提高了開發(fā)效率 。 作為一個(gè)高度集成化的 IDE, Visual C++ 不僅僅提供了對(duì) C++語言的支持,而且能夠用來編輯一些簡(jiǎn)單的圖片和其他信息。對(duì) 于開發(fā)者 而言,不必把大量的時(shí)間都放在那些與程序無關(guān)的事情上,無疑是一 件好事 。除非你是個(gè)只喜歡把代碼都 CO、 CO進(jìn)去的時(shí)間浪費(fèi)者,否則選擇選擇 VC++這樣的 IDE無疑會(huì)對(duì)你有很大的幫助。 在該 IDE 中也提供了對(duì)開發(fā)人員來說最重要的工具之一,開發(fā)文檔。目前很多的工具都自帶了幫助文檔,但微軟的 MSDN 確實(shí)作的非常出色。就算你對(duì)這個(gè)工具絲毫不了解,也可以通過該文檔快速的上手使用。 4 SMTP 協(xié)議客戶端軟件設(shè)計(jì)與實(shí)現(xiàn) 需求分析與總體設(shè)計(jì) 功能分析 由本設(shè)計(jì)的題目可知,本設(shè)計(jì)的目的就是建立一款能夠發(fā)送郵件的客戶端軟件。對(duì)本軟件而言,應(yīng)該具備如下功能: 1)可以保存用戶輸入數(shù)據(jù)。 2)可以根據(jù)用戶輸入的數(shù)據(jù)連接服務(wù)器,并進(jìn)行身份驗(yàn)證。 3)可以對(duì)有關(guān)數(shù)據(jù)進(jìn)行加密。 4)可以發(fā)送郵件信息(含附件)。 5)圖形界面要信息完整、操作舒適、界面雅觀。 根據(jù)以上分析,需要進(jìn)行編碼的操作有: 1) 從圖形界面獲取輸入的數(shù)據(jù)的操作。 2) 根據(jù) MFC提供的 API 連接服務(wù)器,建立一條連接發(fā)送者和接收者的通道。 3) 提供 BASE64 的加密算法,能夠?qū)τ脩糨斎氲臄?shù)據(jù)進(jìn)行加密。生成滿足SMTP 協(xié)議要求的數(shù)據(jù)。 4) 按照 SMTP 的要求,對(duì)郵件進(jìn)行封裝,生成滿足協(xié)議要求的郵件。 5) 對(duì)郵件發(fā)送過程中,發(fā)送者與接收者之間的命令與應(yīng)答碼之間的關(guān)系進(jìn)行分析。 6) 圖形界面編程。 總體設(shè)計(jì) 目前流行的工作平臺(tái)有很多,可以實(shí)現(xiàn)目標(biāo)的編程語言也有多種。下面與流行的兩種平臺(tái)做比較并說明選擇 VC++的原因: 整個(gè)工程使用 JAVA 平臺(tái) 從誕生至今,一路走來 JAVA 可以說是一帆風(fēng)順。已經(jīng)超越了 C++稱為最受歡迎的語言之一。如果選擇使用 JAVA 作為開發(fā)語言,并使用一種集成 IDE,如:JBUILDER。調(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 支持的比較好)。而且使用 JAVA 的條件是用戶必須安裝虛擬機(jī),并且 JAVA 的執(zhí)行速度在目前來看似乎也不太被看好。因此沒有考慮使用 JAVA 來完成本設(shè)計(jì)。 整個(gè)工程使用 C語言實(shí)現(xiàn) 論速度而言,除開低等的匯編, C語言絕對(duì)的獨(dú)占熬頭,并且 C語言的語法簡(jiǎn)單,構(gòu)建出的程序結(jié)構(gòu)也清晰。結(jié)構(gòu)化的程序設(shè)計(jì)方式,也讓人自然而然的從上而下的去思考。其類庫并且提供了大量的有關(guān)網(wǎng)絡(luò)操作 API,讓用戶能夠方便的使用并獲得所求的值。但 C語言并沒有提供太多有關(guān)圖形設(shè)計(jì)方面的框架(或者是目前沒有用于 C 語言的應(yīng)用程序框架)。開發(fā)者可能會(huì)花大量的時(shí)間在分析事件的流程上,而不是程序的邏輯。如此一來,得不償失。 因此,軟件采用 MFC 為應(yīng)用框架,配合 IDE 使用,能夠自動(dòng)提供出一套功能有限但設(shè)計(jì)結(jié)構(gòu)清晰的標(biāo)準(zhǔn) Windows 程序。使用開發(fā)語言為 C++,是典型的面向?qū)ο笤O(shè)計(jì)語言。利用其面向?qū)ο蟮奶匦?,在開發(fā)過程中能夠方便的向軟件添加功能。因此,在該程序的設(shè)計(jì)過程中,選取了 C++作為開發(fā)語言, VC++ 作為程序設(shè)計(jì)的 IDE。在本軟件構(gòu)過程中,定義了 CSMTP、 CMailMessage、 CMIMEMessage、 CBASE64 四個(gè)工具類,給程序使用。整個(gè)程序就是使用了 MFC 提供的應(yīng)用程序框架,并在其中添加了上述幾個(gè)工具 類,相互協(xié)調(diào)工作而得來。結(jié)構(gòu)清晰,功能相對(duì)完備,既完成了預(yù)期的需求,也學(xué)習(xí)到了有關(guān) SMTP 協(xié)議的知識(shí)。 各模塊設(shè)計(jì) 實(shí)現(xiàn) SMTP 協(xié)議的 核心類庫 如上所述,目前與 SMTP 協(xié)議有關(guān)的核心類共四個(gè),對(duì)于郵件的所有操作,均封裝在四個(gè)工具類中。按照其完成的功能進(jìn)行劃分,每個(gè)工具類都可以作為一個(gè)子模塊。四個(gè)子模塊各守其則,分別代表了某一種功能或?qū)嶓w。 一、 CSMTP 子模塊:該模塊封裝了有關(guān)郵件發(fā)送過程的操作。使用該模塊可以建立或斷開與服務(wù)器的連接、向服務(wù)器發(fā)送消息、從服務(wù)器接受消息并分析得到的消息代碼 是否正確、在服務(wù)器返回錯(cuò)誤消息時(shí)獲取到該消息。對(duì)于 SMTP的分析以及發(fā)送時(shí)發(fā)送端與接收端之間的會(huì)話,均由此類完成。該類提供了兩個(gè)重要的程序接口 Connect 和 TransmitMessage。其他模塊只需調(diào)用其接口方法,并傳遞正確的參數(shù),就可以方便的與服務(wù)器建立連接,并傳送郵件內(nèi)容。由于當(dāng)前大多數(shù) SMTP 服務(wù)器都已經(jīng)要求用戶進(jìn)行身份驗(yàn)證,因此在該類中還封裝了對(duì)發(fā)送者身份驗(yàn)證的操作。其類圖 如圖 4所示。 圖 4 CSMTP類類圖 成員 變量 說明: 1) private BOOL m_bConnected:私有成員變量,表示 當(dāng)前是否與服務(wù)器連接。 TRUE 表示已連接; FALSE 表示沒有進(jìn)行連接。 2) private UINT m_nPort:私有成員變量,表示與服務(wù)器連接的端口。在該軟件中該值為 25。表示使用服務(wù)器的 25 號(hào)端口。 3) private CString m_nSMTPServerHostName:私有成員變量,表示服務(wù)器的名稱。例如: 。 4) private CSocket m_SMTPServer:私有成員變量,表示連接到服務(wù)器的網(wǎng)絡(luò)實(shí)體。 5) private CStringList * m_psErrorList:私有成員變量,是用于存放產(chǎn)生的錯(cuò)誤消息的列表。 6) protected TCHAR* responseBuf:保護(hù)成員變量,用于存放服務(wù)器返回的消息。 7) protected static ResponseCode* responseTable[]:保護(hù)的靜態(tài)成員變量,代表消息碼與對(duì)應(yīng)消息的映射表。 成員函數(shù) 說明: 1) private BOOL GetResponse(UINT responseExpected):該方法根據(jù)獲取的 UINT 類型的參數(shù) responseExpected 來判斷所進(jìn)行的操作是否正確 。在該方法中客戶端接收從服務(wù)器發(fā)送來的消息,并進(jìn)行解析,然后根據(jù)給定的參數(shù)responseExpected 來進(jìn)行判斷。如果判斷正確,那么返回 TRUE;否則返回 FALSE。 2) public void SetServerProperties(CString szSMTPServerName , UINT nPort=SMTP_PORT):該方法根據(jù)獲得的字符串類型和 UINT 類型參數(shù)來設(shè)置要連接的服務(wù)器的名稱以及端口號(hào)。其中 szSMTPServerName 是服務(wù)器的名稱, nPort是端口號(hào)。其默認(rèn)值為 SMTP_PORT 25。 3) public CString GetLastError():通過調(diào)用該方法,能夠獲取服務(wù)器返回的錯(cuò)誤信息。如果沒有錯(cuò)誤信息,則返回空。 4) public UINT GetPort():獲取服務(wù)器的端口號(hào)。 5) public BOOL Connect():連接服務(wù)器方法。通過該方法,可以根據(jù)SetServerProperties 方法設(shè)置的屬性,連接到指定的服務(wù)器 。 如果連接成功則返回 TRUE; 否則返回 FALSE。 6) public virtual BOOL TransmitMessgae(CMailMessage * msg):該方法的作用是根據(jù)傳遞進(jìn)來的 CMailMessage 對(duì)象傳送郵件。在該方法中封裝了郵件發(fā)送的操作并 對(duì) SMTP 協(xié)議規(guī)定的命令和應(yīng)答碼的交互操作做了實(shí)現(xiàn), 而且與郵件發(fā)送有關(guān)的身份驗(yàn)證操作也在該方法中實(shí)現(xiàn)。本方法的參數(shù) msg 應(yīng)包含就是要發(fā)送的郵件的信息,如發(fā)送的來源、目的地、郵件的題目、發(fā)送時(shí)間、正文內(nèi)容以及附件,均存儲(chǔ)在 msg 對(duì)象中。在發(fā)送過程中,順序發(fā)送命令: AUTH LOGIN、MAIL FROM 、 RCPT TO(可重復(fù)多次)、 DATA (結(jié)束符 )、 QUIT,并在每次發(fā)送后設(shè)置一個(gè)接收指令,用于接收從服務(wù)器傳回的數(shù)據(jù),并進(jìn)行分析。如果是預(yù)期的數(shù)據(jù)那么返回 TRUE,標(biāo)志發(fā)送成功;如果返回 FALSE,標(biāo)志發(fā)送失敗。 7) private CString CookBody(CMailMessage * msg):該方法用于剔除在郵件正文以及郵件中與結(jié)束標(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ò)誤。當(dāng)郵件發(fā)送到服務(wù)器后,會(huì)自動(dòng)的把郵件正文中的被替換的字符換回為原來的字符,從而保證郵件的正確性。該方法的參數(shù)為 CMailMessage*類型的指針,代表一個(gè)郵件對(duì)象。該對(duì)象包含有關(guān)的郵件信息,方便在本方法中對(duì)要發(fā)送的郵件進(jìn)行操作。 8) protected static ResponseCode* GetServerResponseMessage(UINT):該方法的作用是根據(jù)傳遞進(jìn)來的消息碼來返回一個(gè)與消息碼對(duì)應(yīng)的服務(wù)器消息 。該方法采用查表的方式,根據(jù)郵件服務(wù)器發(fā)送的消息,來確定返回消息的具體信息,該方 法主要在郵件操作出錯(cuò)時(shí),提供錯(cuò)誤信息。如果查表成功,返回一個(gè)合適 的出錯(cuò)信息;如果查表失敗,則返回未知錯(cuò)誤。有關(guān)應(yīng)答碼和與應(yīng)答碼 相關(guān) 信息,均在本類的靜態(tài)成員變量 ResponseCode responseTable 中做了規(guī)定。 二、 CMailMessage 子模塊:該模塊用于表示郵件的所有內(nèi)容,如:郵件的發(fā)送者、接收者、標(biāo)題、正文以及附件。該類的設(shè)計(jì)借鑒了 JAVA 中 JavaBean的定義方式,對(duì)私有數(shù)據(jù)進(jìn)行封裝只能通過對(duì)應(yīng)的方法進(jìn)行 存取。使用本類提供了能夠?qū)︵]件內(nèi)容進(jìn)行規(guī)范化設(shè)計(jì)的操作,使用這些操作能夠得到滿足 SMTP 協(xié)議規(guī)定的電子郵件。其類圖如 圖 5所示。 圖 5 CMailMessage類類圖 成員變量 說明 : 1) public CPtrArray m_Attachments:公有成員變量,表示郵件的附件。使用 MFC 提供的 CPtrArray 類型變量,能夠方便的存儲(chǔ)多個(gè)附件的信息。 2) public CString m_AttachmentString:表示附件文件的名稱,在給該類的對(duì)象添加有關(guān)的附件信息的時(shí)候 使用。 3) protected CString m_sSubject、 m_sFrom、 m_sTo、 m_sHeader、 m_sBody、m_sPassword、 CTime m_tDateTime:表示郵件的信息,分別為 :郵件的標(biāo)題、郵件發(fā)送者、郵件接收者、郵件頭信息、郵件體正文、身份驗(yàn)證的密碼以及郵件發(fā)送的時(shí)間。對(duì)于每個(gè)域均有一對(duì)對(duì)應(yīng)的存取方法 Get 和 Set 來對(duì)其進(jìn)行操作。這設(shè)計(jì)的方式參考了 JAVA 中的 JavaBean 的設(shè)計(jì)模式。方便調(diào)用者使用該類。 4) private CArray CRecipient,CRecipientamp。 m_Recipients:私有成員變量。表示郵件接收者的一個(gè)數(shù)組。在 SMTP 協(xié)議中規(guī)定:一封郵件可以有多個(gè)接收者,每個(gè)接收者需要一個(gè) RCPT TO 命令與之對(duì)應(yīng)。該變量就是用于存儲(chǔ)多個(gè)接收者的。 成員函數(shù)說明: 1) public int AddAttachMent(C
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1