【正文】
sTemp , int amp。本方法根據(jù) BASE64 編碼的定義,對數(shù)據(jù)進行了編碼。 成員 函數(shù) 說明: 1) public DWORD CBASE64::ComputeLen(DWORD size):該方法的作用是計算編碼后數(shù)據(jù)的長度 。其類圖 如圖 7所示。為類的調(diào)用者提供了統(tǒng)一的操作接口。sFilename):該方法的作用是根據(jù)傳遞進來的參數(shù)文件名,來把本地文件中的內(nèi)容讀取出來,并添加到當前附件對象中。添加到郵件時使用。使用該類可以根據(jù)提供的文件名讀取出正確的文件,保存文件名和標題。在方法中,根據(jù)當前添加的郵件附件的個數(shù)來添加標志。 7) public virtual void PrepareBody():該方法的作用是生成一個滿足SMTP 協(xié)議的郵件體。根據(jù) SMTP 協(xié)議的規(guī)定,郵件的頭包括: From、 To(可重復多次 )、 Subject、 Date、 XMailer、 MIMEVersion: 、 Contenttype 等多 個域。szEmailAddress 表示郵件的地址, szFriendlyName 表示名稱。分別代表:普通接收者,抄送和密送。 2) public int GetAttachmentNum():該方法的作用是獲取當前附件的個數(shù)。 成員函數(shù)說明: 1) public int AddAttachMent(CString filename):該方法的作用是添加根據(jù)參數(shù)提供的文件名稱,把該文件當成附件添加到當前的郵件中。 m_Recipients:私有成員變量。對于每個域均有一對對應的存取方法 Get 和 Set 來對其進行操作。 圖 5 CMailMessage類類圖 成員變量 說明 : 1) public CPtrArray m_Attachments:公有成員變量,表示郵件的附件。 二、 CMailMessage 子模塊:該模塊用于表示郵件的所有內(nèi)容,如:郵件的發(fā)送者、接收者、標題、正文以及附件。 8) protected static ResponseCode* GetServerResponseMessage(UINT):該方法的作用是根據(jù)傳遞進來的消息碼來返回一個與消息碼對應的服務器消息 。在 SMTP協(xié)議中規(guī)定 :郵件正文以 DATA命令開始,以“ ”標志結(jié)束,為了避免在郵件正文中,出現(xiàn)上述的結(jié)束標志,必須在發(fā)送郵件前檢測郵件,把郵件中所有的與郵件結(jié)束符號相 同的字 符替換為“ CRLF..CRLF”,來避免在郵件發(fā)送時出現(xiàn)結(jié)束位置 不明 的錯誤。本方法的參數(shù) msg 應包含就是要發(fā)送的郵件的信息,如發(fā)送的來源、目的地、郵件的題目、發(fā)送時間、正文內(nèi)容以及附件,均存儲在 msg 對象中。通過該方法,可以根據(jù)SetServerProperties 方法設置的屬性,連接到指定的服務器 。 3) public CString GetLastError():通過調(diào)用該方法,能夠獲取服務器返回的錯誤信息。如果判斷正確,那么返回 TRUE;否則返回 FALSE。 6) protected TCHAR* responseBuf:保護成員變量,用于存放服務器返回的消息。 3) private CString m_nSMTPServerHostName:私有成員變量,表示服務器的名稱。 TRUE 表示已連接; FALSE 表示沒有進行連接。其他模塊只需調(diào)用其接口方法,并傳遞正確的參數(shù),就可以方便的與服務器建立連接,并傳送郵件內(nèi)容。 一、 CSMTP 子模塊:該模塊封裝了有關(guān)郵件發(fā)送過程的操作。結(jié)構(gòu)清晰,功能相對完備,既完成了預期的需求,也學習到了有關(guān) SMTP 協(xié)議的知識。利用其面向?qū)ο蟮奶匦?,在開發(fā)過程中能夠方便的向軟件添加功能。開發(fā)者可能會花大量的時間在分析事件的流程上,而不是程序的邏輯。 整個工程使用 C語言實現(xiàn) 論速度而言,除開低等的匯編, C語言絕對的獨占熬頭,并且 C語言的語法簡單,構(gòu)建出的程序結(jié)構(gòu)也清晰。如果選擇使用 JAVA 作為開發(fā)語言,并使用一種集成 IDE,如:JBUILDER。 6) 圖形界面編程。 3) 提供 BASE64 的加密算法,能夠?qū)τ脩糨斎氲臄?shù)據(jù)進行加密。 4)可以發(fā)送郵件信息(含附件)。 4 SMTP 協(xié)議客戶端軟件設計與實現(xiàn) 需求分析與總體設計 功能分析 由本設計的題目可知,本設計的目的就是建立一款能夠發(fā)送郵件的客戶端軟件。除非你是個只喜歡把代碼都 CO、 CO進去的時間浪費者,否則選擇選擇 VC++這樣的 IDE無疑會對你有很大的幫助。作為一款優(yōu)秀的集成開發(fā)環(huán)境,它提供了很多方便開發(fā)的功能。在整個程序的構(gòu)建時,也是使用了這 個大名鼎鼎的 Microsoft Foundation Class 框架。由軟件業(yè)巨頭微軟強力推出。生成一個能夠向任何實現(xiàn)了 SMTP 協(xié)議的郵件服務器發(fā)送郵件的客戶端軟件,服務器端可以任意選?。▽崿F(xiàn) SMTP 協(xié)議即可)。為了加深對 SMTP 協(xié)議的理解,全面掌握 SMTP 協(xié)議,提高動手能力和解決實際問題的能力,而 提出了該課題。(可以把其看成是 822 文檔的全面升級版本,當然這種說法并不準確,因為它們共同點僅僅是都對內(nèi)容格式進行說明。客戶端發(fā)送密碼給服務器,等待服務器的驗證結(jié)果,服務器返回235 Authentication successful 信息給客戶端。然后繼續(xù)發(fā)送 250 應答碼,要求客戶端去進行身份驗證。 C: AUTH LOGIN S: 334 Username 的 BASE64 編碼 C: 用戶名 的 BASE64 編碼 S: 334 Password 的 BASE64 編碼 C: 密碼的 BASE64 編碼 S: 235 Authentication successful. 當客戶端發(fā)送連接請求到 服務器時,服務器返回 220 應答碼,說明目前服務器已經(jīng)準備工作。 RFC2554 文檔: ESMTP( SMTP Service Extension for Authentication),它是對 SMTP 協(xié)議的擴展,確切來說是對于郵件傳輸中有關(guān)身份認證部分的規(guī)定。沒有 改變?nèi)魏卧械拿?,只是簡單的增加了?nèi)容。 圖 3 SMTP協(xié)議規(guī)定的命令關(guān)鍵字 相關(guān)協(xié)議的簡單介紹 電子郵件系統(tǒng)經(jīng)過幾十年的發(fā)展,已經(jīng)形成了較為完善的技術(shù)體系。服務器會 回 復它一個正常的代碼。信道正常被建立或銷毀的時候,服務器端和客戶端會分別依靠命令和應答碼來打開或關(guān)閉信道。在 SMTP 中規(guī)定了建立和銷毀通道的命令。 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。 上面所述的過程是一個發(fā)送操作。 注意:郵件內(nèi)容包括如下提示: Date , Subject , From , To 。 DATACRLF 如果命令被接收,接收方返回一個 354 Intermediate 應答,并認定以下的 各行都是信件內(nèi) 容。如果接收者未知,接收方會返回一個 550 Failure 應答。如果請求被接收,接收方返回一個 250 OK應答。一系列或更多的 RCPT 命令緊跟其后,給出了接收者信息,然后是 DATA命令列出發(fā)送的郵件內(nèi)容,最后郵件內(nèi)容指示符確認操作。得到服務器的信息后,對這些信息進行分析,再繼續(xù)進行下一步操作。這樣 SMTP 實現(xiàn)中就將用戶郵箱名稱保留成初始時的樣子,主機名稱對大小寫不敏感。 MAIL 命令參數(shù)是回復路徑,它指定郵件從何處來;而 RCPT 命令的參數(shù)是轉(zhuǎn)發(fā)路徑的,它指定郵件向何處去。當接收者收到全部郵件后就會收到特別的序列,如果接受者成功處理了郵件,則返回 OK 應答。 一旦傳送通道建立, SMTP 發(fā)送者發(fā)送 MAIL 命令指明郵件發(fā)送者。以下就以 RFC821 文檔中規(guī)定描述有關(guān)的內(nèi)容。相關(guān)文檔也由最初的RFC821 文檔,擴展為目前的 RFC282 RFC2045- 204 RFC2554 等多個。郵件可以通 過連接在不同 IPCE(Interprocess Communication Environment)上的進程跨網(wǎng)絡進行郵件傳送。 SMTP 的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務提供了進程間通信環(huán)境( IPCE),此環(huán)境可以包括一個網(wǎng)絡,幾個網(wǎng)絡或一個網(wǎng)絡的子網(wǎng)。 2 SMTP 協(xié)議概述 協(xié)議簡介 SMTP,簡單郵件傳輸協(xié)議是 Simple Mail Transfer Protocol 的縮寫。 本畢業(yè)設計以 SMTP 協(xié)議為理論基礎(chǔ),以面向?qū)ο蟮姆绞皆?VC++ 平臺下進行實現(xiàn)。本軟件實現(xiàn)的是用于發(fā)送郵件的SMTP 協(xié)議。電子郵件技術(shù)具有方便、快捷、成本低廉等特性。 EMail。該軟件實現(xiàn)了 SMTP協(xié)議,具有向郵件服務器發(fā)送身份驗證消息以及郵件的功能,使用戶能夠在本地通過客戶端程序向服務器發(fā)送郵件信息。論文著重對郵件服務所使用的 SMTP 協(xié)議進行了分析,并根據(jù) ESMTP 協(xié)議的規(guī)定添加了身份驗證的功能增加了 郵件服務的安全性。通過本設計可以掌握 SMTP 協(xié)議,了解到當前郵件服務的一些不足。從常規(guī)的郵件發(fā)送過程出發(fā),采用 C++語言在 VC++的平臺下,借助 VC++ 提供的應用程序框架 MFC加以實現(xiàn)。 關(guān)鍵詞 : SMTP協(xié)議 ; 郵件 ; C++; 客戶端 The design and implementation of a SMTP Client Abstract This thesis is pleted in the foundation of the SMTP protocol client software MyEMail. It relates to the software design, implementation, testing and so on. Through the design, the SMTP protocol can be mastered and the deficiencies of current mail service can be understood. The thesis focuses on analyzing the SMTP protocol used by the mail service and adds the authentication function which will increase the mail service security according to the provisions of the protocol ESMTP. MyEMail SMTP software is based on the principles of the protocol, the model and working processes of agreement. And it is a practical and SMTP protocol based client software. The software analyzes the working model and processes of protocol. It starts with the conventional mail process and uses the C++ language and MFC framework in VC++ platform. The SMTP protocol is implemented in this software. It can send authentication information and to the mail server. The users can send authentication information and Email to the server through local software. At present, although the protocol stipulates that the website information can be used in the text, it means that the mail content can contain malicious code, which has potential safe problems. So, the support is not provided in the design. Key words: SMTP Protocol。采用電子郵件服務可以方便快捷的與朋友、同事或合作伙伴進行溝通, 傳遞信息。 目前與郵件相關(guān)的協(xié)議大概可以分為兩種:一種是郵件發(fā)送協(xié)議―― SMTP協(xié)議;另一種是郵件接收協(xié)議―― POP 協(xié)議。目的在于掌握 SMTP 的工作原理,并實現(xiàn)一個能夠發(fā)送郵件的完整郵件客戶端。在實現(xiàn)過程中,用到了 VC++中的 MFC 框架,使得軟件能夠符合有關(guān)的 WINDOWS 程序標準,并且有了清晰的結(jié)構(gòu)規(guī)劃,給維護帶來了方便。 SMTP 協(xié)議的目標是可靠