版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué) 號(hào):068108210南陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)論文目題目基于 POP3 協(xié)議的電子郵件接收程序的設(shè)計(jì)2012 年 3 月 26 日錄摘學(xué)院軟件學(xué)院要 專(zhuān)業(yè)軟件工程1、班級(jí)08 級(jí)軟件工程 7 班引姓名王志杰言1.1指導(dǎo)教師劉凱課程設(shè)計(jì) TOC o 1-5 h z 的內(nèi)容 2 HYPERLINK l bookmark10 o Current Document 課程設(shè)計(jì)的要求 2 HYPERLINK l bookmark12 o Current Document 2、設(shè)計(jì)平臺(tái)簡(jiǎn)介 2VC+ 2 HYPERLINK l bookmark16 o Current Document 3、郵件接收協(xié)議 4
2、 HYPERLINK l bookmark18 o Current Document POP3 簡(jiǎn)介 4 HYPERLINK l bookmark22 o Current Document 4、設(shè)計(jì)原理 7 HYPERLINK l bookmark24 o Current Document POP3 交互模型 7 HYPERLINK l bookmark26 o Current Document 5、課程設(shè)計(jì)步驟 8 HYPERLINK l bookmark28 o Current Document 函數(shù)構(gòu)造 8 HYPERLINK l bookmark30 o Current Documen
3、t 接收郵件的步驟 14 HYPERLINK l bookmark32 o Current Document 6、測(cè)試 18 HYPERLINK l bookmark34 o Current Document 測(cè)試目的 18南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文) HYPERLINK l bookmark36 o Current Document 測(cè)試環(huán)境 18 HYPERLINK l bookmark38 o Current Document 測(cè)試結(jié)果 18 HYPERLINK l bookmark40 o Current Document 結(jié)果分析 19 HYPERLINK l bookmark
4、42 o Current Document 7、出現(xiàn)的問(wèn)題及解決方法 19 HYPERLINK l bookmark44 o Current Document 設(shè)計(jì)中出現(xiàn)的問(wèn)題 19 HYPERLINK l bookmark46 o Current Document 解決方法 19 HYPERLINK l bookmark48 o Current Document 參考文獻(xiàn) 19摘要電子郵件可以使人們有效地進(jìn)行電子化的數(shù)據(jù)異地交換。 Internet 以電子 郵件服務(wù)推動(dòng)著人類(lèi)的通信行為不斷發(fā)展, 郵件的接收系統(tǒng)。本論文以 Visual C# 為開(kāi)發(fā)平臺(tái),利用 Socket 套接字編程,實(shí)現(xiàn)了
5、基于 POP3協(xié)議的郵件接收程序, 介紹了 POP3協(xié)議的原理及電子郵件接收程序的設(shè)計(jì)和實(shí)現(xiàn)方法。隨著 Internet/Intranet 的迅猛發(fā)展,電子郵件( E-Mail )已成為因特網(wǎng)上 非常流行、非常方便的通信方式。 電子郵件技術(shù)不斷進(jìn)步, 郵件協(xié)議也不斷發(fā)展。 目前使用最廣泛的電子郵件收件協(xié)議是 POP3。本文采用微軟最新的 .NET技術(shù),以 Visual C# 為開(kāi)發(fā)平臺(tái),利用 Socket 套接字編程開(kāi)發(fā)了基于 POP3協(xié)議的郵件接收 程序,現(xiàn)對(duì)相關(guān)原理及具體設(shè)計(jì)進(jìn)行討論。關(guān)鍵詞 課程設(shè)計(jì);電子郵件;接收程序; POP3;Socket ;Visual C#南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)
6、計(jì) (論文)1、引言隨著 Internet/Intranet的迅猛發(fā)展,電子郵件( E-Mail )已成為因特網(wǎng)上非常流行、非常方便的通信方式。 電子郵件技術(shù)不斷進(jìn)步, 郵件協(xié)議也不斷發(fā)展。 目前使用最廣泛的電子郵件收件協(xié)議是 POP3。本文采用微軟最新的 .NET技術(shù),以 Visual C# 為開(kāi)發(fā)平臺(tái),利用 Socket 套接字編程開(kāi)發(fā)了基于 POP3協(xié)議的郵件接收 程序,現(xiàn)對(duì)相關(guān)原理及具體設(shè)計(jì)進(jìn)行討論。1.1 畢業(yè)設(shè)計(jì)的內(nèi)容運(yùn)用 C#語(yǔ)言設(shè)計(jì)一個(gè)郵件程序?qū)崿F(xiàn)郵件的接收1.2 畢業(yè)設(shè)計(jì)的要求(1)按要求編寫(xiě)課程設(shè)計(jì)報(bào)告書(shū),能正確闡述設(shè)計(jì)結(jié)果。(2)通過(guò)課程設(shè)計(jì)培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,認(rèn)真的
7、工作作風(fēng)和團(tuán)隊(duì)協(xié)作 精神。(3)學(xué)會(huì)文獻(xiàn)檢索的基本方法和綜合運(yùn)用文獻(xiàn)的能力。(4)在老師的指導(dǎo)下,要求每個(gè)學(xué)生獨(dú)立完成課程設(shè)計(jì)的全部?jī)?nèi)容。2、設(shè)計(jì)平臺(tái)簡(jiǎn)介Visual C#( 1)背景VC+是微軟公司開(kāi)發(fā)的一個(gè) IDE(集成開(kāi)發(fā)環(huán)境 ), 換句話說(shuō) , 就是使用 C+的 一個(gè)開(kāi)發(fā)平臺(tái)。 VC+是 Windows 平臺(tái)上的 C+編程環(huán)境,學(xué)習(xí) VC 要了解很多 Windows平臺(tái)的特性并且還要掌握 MFC、ATL、COM等的知識(shí),難度比較大。Windows 下編程需要了解 Windows的消息機(jī)制以及回調(diào)( callback )函數(shù)的原理; MFC是 Win32API 的包裝類(lèi),需要理解文檔視圖
8、類(lèi)的結(jié)構(gòu),窗口類(lèi)的結(jié)構(gòu),消息流向等 等; COM是代碼共享的二進(jìn)制標(biāo)準(zhǔn),需要掌握其基本原理等等。南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)Visual C# 作為 Visual Studio 的一個(gè)組件,可以通過(guò)安裝 Visual Studio 來(lái)獲得。 VC 作為一個(gè)主流的開(kāi)發(fā)平臺(tái)一直深受編程愛(ài)好者的喜愛(ài),但是很多人 卻對(duì)它的入門(mén)感到難于上青天, 究其原因主要是大家對(duì)他錯(cuò)誤的認(rèn)識(shí)造成的, 嚴(yán) 格的來(lái)說(shuō) VC+不是門(mén)語(yǔ)言,雖然它和 C+之間有密切的關(guān)系 , 如果形象點(diǎn)比喻的 話,可以把 C+看作為一種 “工業(yè)標(biāo)準(zhǔn) ”,而 VC+則是某種操作系統(tǒng)平臺(tái)下的 “廠 商標(biāo)準(zhǔn)”,而“廠商標(biāo)準(zhǔn) ”是在遵循“工業(yè)標(biāo)
9、準(zhǔn)”的前提下擴(kuò)展而來(lái)的。 ( 2)基本模式Visual C# 使用程序的開(kāi)發(fā)主要有兩種模式,一種是 WIN API 方式,另一種 則是 MFC方式。 VC基于 C,C+語(yǔ)言,主要由是 MFC組成,是和系統(tǒng)聯(lián)系非常緊 密的編程工具,它兼有高級(jí),和低級(jí)語(yǔ)言的雙重性,功能強(qiáng)大,靈活,執(zhí)行效率 高,幾乎可說(shuō) VC在 Windows 平臺(tái)無(wú)所不能。最大缺點(diǎn)是開(kāi)發(fā)效率不高。 ( 3)適用范圍 【 1】1、VC 主要是針對(duì) Windows系統(tǒng),適合一些系統(tǒng)級(jí)的開(kāi)發(fā),可以方便實(shí)現(xiàn) 一些底層的調(diào)用。在 VC里邊嵌入?yún)R編語(yǔ)言很簡(jiǎn)單。2、VC 主要用在驅(qū)動(dòng)程序開(kāi)發(fā)。3、VC執(zhí)行效率高 ,當(dāng)對(duì)系統(tǒng)性能要求很高的時(shí)候,
10、可用 VC開(kāi)發(fā)。4、VC 主要適用于游戲開(kāi)發(fā)。5、VC 多用于單片機(jī),工業(yè)控制等軟件開(kāi)發(fā),如直接對(duì) I/O 地址操作,就 要用 C+。6、VC 適用開(kāi)發(fā)高效,短小,輕量級(jí)的 COM組件 ,DLL。比如 WEB上的控件。7、VC 可以開(kāi)發(fā)優(yōu)秀的基于通信的程序。8、VC 可以開(kāi)發(fā)高效靈活的文件操作程序。9、VC 可以開(kāi)發(fā)靈活高效的數(shù)據(jù)庫(kù)操作程序。10、VC是編 CAD軟件的唯一選擇。包括 AUTOCA,DUG的二次開(kāi)發(fā)。11、VC 在多線程、網(wǎng)絡(luò)通信、分布使用方面, VC+有不可比擬的優(yōu)勢(shì)。3南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)3、郵件接收協(xié)議POP3 簡(jiǎn)介POP3( Post Office Pro
11、tocol Version 3),即郵局辦公協(xié)議,該協(xié)議用于接收郵件的雙方( 客戶機(jī)、 POP3服務(wù)器)進(jìn)行通信。使用該協(xié)議,用戶可以脫 機(jī)閱讀信件,而不必把客戶機(jī)長(zhǎng)期連接到網(wǎng)絡(luò)上,以減少網(wǎng)絡(luò)費(fèi)用。POP3協(xié)議允許用戶以一定的方式從保存郵件的服務(wù)器 ( 即 POP3服務(wù)器) 上取走自己的郵 件。3.2 POP3 協(xié)議工作原理 【2】POP3提供了一種客戶機(jī) /服務(wù)器脫機(jī)模型, 客戶機(jī)通過(guò)向服務(wù)器發(fā)送一些命 令來(lái)完成相應(yīng)的操作。 客戶機(jī)能夠發(fā)送的命令和它所處的狀態(tài)有關(guān)。 協(xié)議中定義 了三種狀態(tài):即確認(rèn)狀態(tài)( Authorization State )、處理狀態(tài)(Transaction State
12、 ) 和更新?tīng)顟B(tài)( Update State )。在不同的狀態(tài)下,客戶機(jī)可以向服務(wù)器發(fā)送的命 令是有區(qū)別的,某些命令還會(huì)導(dǎo)致?tīng)顟B(tài)的轉(zhuǎn)換。 POP3交互過(guò)程中的常用命令和 狀態(tài)轉(zhuǎn)換如圖 3.2.1 和表 3.2.1 所示。南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)圖 3.2.1 POP3 的狀態(tài)轉(zhuǎn)換示意圖南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)表 3.2.1 一些常用的 POP3命令POP3服務(wù)器一般使用的是 TCP的 110 號(hào)端口。當(dāng)客戶機(jī)和服務(wù)器建立 TCP 連接時(shí), POP3服務(wù)器向客戶機(jī)發(fā)回一個(gè)問(wèn)候,交互過(guò)程即進(jìn)入確認(rèn)狀態(tài)。此時(shí), 若客戶機(jī)提供了自己的身份并成功確認(rèn), 即由確認(rèn)狀態(tài)轉(zhuǎn)入處理狀態(tài); 在
13、這個(gè)狀 態(tài),用戶可用相應(yīng)的命令處理自己的郵件。 在完成相應(yīng)的處理過(guò)程后客戶機(jī)發(fā)出 QUIT 命令,則進(jìn)入更新?tīng)顟B(tài);在此狀態(tài)下, POP3服務(wù)器釋放郵件資源并返回一 個(gè)告別響應(yīng);最后關(guān)閉 TCP連接。通過(guò) POP3命令查詢電子郵件時(shí),客戶機(jī)可以下載指定的郵件,然后對(duì)郵件 進(jìn)行刪除或修改操作都無(wú)需和服務(wù)器進(jìn)一步交互。 客戶機(jī)向服務(wù)器發(fā)送命令并等 待響應(yīng), POP3命令采用命令行形式,用 ASCII 碼表示。服務(wù)器響應(yīng)是由一行或 多行組成,其中,第一行以 ASCII 文本 +OK, 或-ERR開(kāi)始,分別指出相應(yīng)的操作 是成功還是失敗。POP3命令包含一個(gè)大小寫(xiě)無(wú)關(guān)的關(guān)鍵字和一個(gè)或多個(gè)參量,所有的命令
14、以 回車(chē)換行符)作為其結(jié)束標(biāo)志。關(guān)鍵字和參量必須是非控制符的 ASCII 碼字符。 關(guān)鍵字和參量之間, 參量和參量之間由一個(gè)空格字符分隔開(kāi)。 關(guān)鍵字長(zhǎng) 不大于四個(gè)字符,每個(gè)參量最長(zhǎng)可到 40 個(gè)字符。南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)POP3響應(yīng)包含一個(gè)狀態(tài)標(biāo)志和一個(gè)跟隨其后的附加信息。 響應(yīng)也用 作為其結(jié)束標(biāo)志。 響應(yīng)最長(zhǎng)到 512字節(jié),其中包括 議定義了兩個(gè)狀態(tài) 標(biāo)志:正確(“ +OK”)和錯(cuò)誤(“ -ERR”)。服務(wù)器用大寫(xiě)格式發(fā)送“ +OK” 和“ -ERR”。如果響應(yīng)是多行的,則每行以 束。當(dāng)響應(yīng)的所有行被 發(fā)送后,接著發(fā)送多行響應(yīng)的結(jié)束標(biāo)志行,該行僅包含一個(gè)句點(diǎn)“ . ”和一個(gè) 【
15、3】。4、設(shè)計(jì)原理4.1 POP3 交互模型初始化連接斷開(kāi)連接該模型基本原理為: POP3接收P者O對(duì)P3接PO收P3者發(fā)送者進(jìn)行初始化連接,發(fā)送者對(duì)接收者發(fā)送詢問(wèn)指令READ”Y , 接收者則向發(fā)送者提交所要接收數(shù)據(jù)的要求, 送者做出回應(yīng),并發(fā)送數(shù)據(jù)。接收者則開(kāi)始接收數(shù)據(jù)。發(fā)送者發(fā)送完數(shù)據(jù)后,提 出斷開(kāi)請(qǐng)求,并斷開(kāi)連接。數(shù)據(jù)接收過(guò)程完成。南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)5、課程設(shè)計(jì)步驟5.1 函數(shù)構(gòu)造Windows Socket類(lèi)是對(duì)Windows Socket API 的封裝,其中包括, CSocket和 cAsyncSocket 類(lèi),使用它們能夠大大簡(jiǎn)化網(wǎng)絡(luò)通信程序的編寫(xiě)。 套接字的數(shù)
16、據(jù)結(jié) 構(gòu)中包括下面五種數(shù)據(jù) :本機(jī)主機(jī)端口:接收?qǐng)?bào)文或數(shù)據(jù)報(bào)的進(jìn)程。本機(jī)主機(jī)地址:接收數(shù)據(jù)包的主機(jī)。遠(yuǎn)地協(xié)議端口:目的進(jìn)程或程序。遠(yuǎn)地主機(jī)端口:目的主機(jī)。協(xié)議:程序在網(wǎng)絡(luò)上傳輸數(shù)據(jù)時(shí)使用的協(xié)議。本使用程序就是使用 Windows sockets 編程設(shè)計(jì)的。在接收電子郵件時(shí), 必然需要涉及到連接服務(wù)器,接收數(shù)據(jù),接收響應(yīng)以及斷 開(kāi)等一系列操作 這就需要設(shè)計(jì)一個(gè)類(lèi)來(lái)封裝這些操作, 在該使用程序中制定了 一個(gè)CSMT類(lèi)P 。該類(lèi)的定義如下所示,#define SMTP_PORT 25#define RESPONSE_BUFFER_SIZE 1024class CSMTPPublic;CSMTP(L
17、PCTSTR szSMTPServerName,UINT nPort=SMTP_PORT);virtual CSMTP();void SetServerProperties(LPCTSTR szSMTPserverName,UINT nPort=SMTP_PORT);CString GetlastError();UINT GetPort();BOOL Disconnect();BOOL Connect();virtual BOOL FormatMAilMessage(CMailMessage * msg8南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文));BOOL getMessage(CMailMessa
18、ge * msg);CString GetserverHostName();Private;BOOL get_response(UINT response_expected);CString cook_body(CMailMessage * msg);CString m_serror;BOOL m_bconnected;UINT m_nPort;CString m_sSMTPServerHostName;CSocket m_wsSMTPServer;protected ;virtuaI BOOL transmit_message(CMailMessage * msg);struct respo
19、nse_codeUINT nResponse;TCHAR * sMessage;enum eResponseGENERIC_SUCCESS ,= OCONNECT_SUCC,ESSDATA_SUCCESS,QUIT_SUCCE,SSLAST_RESPONSE);TCHAR * response_buf;static response_code response_table;);其中,m_sError 成員代表錯(cuò)誤信息, m_bConnected表示是否建立連接 ;m_bPort 表示 SMTP服務(wù)器所使用的端口號(hào), m_sSMTPserverHostNam表e示SMTP服務(wù)器的主9南陽(yáng)理工軟件
20、學(xué)院畢業(yè)設(shè)計(jì) (論文)機(jī)名(地址);m_waSMTPserver則為將和 SMTP服務(wù)器建立連接的套接字對(duì)象 ;response_table 表示由服務(wù)器返回的響應(yīng), 而eResponse列舉了所有可能出現(xiàn) 的錯(cuò)誤。因?yàn)殡娮余]件有其特殊的結(jié)構(gòu), 不單簡(jiǎn)單地將其作為文本進(jìn)行處理。例如,郵 件必須在郵件頭和郵件體后發(fā)送,而在收信時(shí),先需要分析郵件頭和郵件 體 CMailMessage類(lèi)是對(duì)郵件進(jìn)行格式化編碼的一個(gè)類(lèi) 【4】。CSMT類(lèi)P 的構(gòu)造函數(shù)如下所示 :CSMTP: ; CSMTP(LPCTSTR szSMTPServerNa,meUINT nPort)ASSERT(szSMTPServer
21、Name l = NULL);AfxSocketInit(); m_sSMTPserverHostName = azSMTPServerName;m_nPort = nPort; m_bConnected = FALSE;m_sError = _ T( “ OK”);response_buf = NULL;在這里調(diào)用 AfxsocketInit 函數(shù)以初始化 Window Sockets 類(lèi)的使用,此外還驗(yàn) 證其他類(lèi)成員是否合法,或?yàn)槠滟x值。#include mySock.h / 添加套接字類(lèi)的包含文件class CPop3Dlg : public CDialog/ Constructionp
22、ublic:void Disp(LONG flag); / 在不同的會(huì)話階段顯示不同的信息 mySock pop3Socket; / 套接字類(lèi)對(duì)象實(shí)例 CPop3Dlg(CWnd* pParent = NULL); / standard constructor(2)pop3Dlg.cpp 實(shí)現(xiàn)文件#include stdafx.h#include pop3.h10南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)#include pop3Dlg.h#include mySock.h / 手工添加的包含語(yǔ)句BOOL CPop3Dlg:OnInitDialog() / TODO: Add extra initia
23、lization here / 用戶在這里添加控件成員變量的初始化代碼服務(wù)器地址 郵箱的用戶名 口令 下載郵件后不刪除 多文本框清空m_strServer = _T(); /POP3 TOC o 1-5 h z m_strUser = _T(example);/m_strPass = _T(123456);/m_bolDel = FALSE;/m_Info = _T(); /return TRUE; / return TRUEunless you set the focus to a control/ 以下是事件處理函數(shù)和其他成員函數(shù)的代碼/ 當(dāng)用戶點(diǎn)擊 連接按鈕時(shí),執(zhí)行此函數(shù)void CPo
24、p3Dlg:OnBtnConn()/ 設(shè)定 pop3類(lèi)的對(duì)話框指針變量,使之指向本對(duì)話框,以便傳遞信息 pop3Socket.SetParent(this);UpdateData(TRUE);/取來(lái)用戶在對(duì)話框中輸入的數(shù)據(jù)pop3Socket.Create();/創(chuàng)建套接字對(duì)象的底層套接字pop3Socket.Connect(LPCSTR)m_strServer,110); / 連接 pop3服務(wù)器 m_Info = ;/ 多文本列表框清空UpdateData(FALSE); / 更新用戶界面/ 當(dāng)用戶點(diǎn)擊 斷開(kāi)按鈕時(shí),執(zhí)行此函數(shù)void CPop3Dlg:OnBtnDisc()11南陽(yáng)理工軟
25、件學(xué)院畢業(yè)設(shè)計(jì) (論文)pop3Socket.Close();/ 當(dāng)用戶點(diǎn)擊 查看郵件 按鈕時(shí),執(zhí)行此函數(shù)void CPop3Dlg:OnBtnView()int i;i = m_ctrList.GetCurSel(); /獲得用戶在組合框中的選擇/ 獲得并顯示指定信件的基本屬性及信件內(nèi)容 m_Info += pop3Socket.GetMsgStuff(i);m_Info += pop3Socket.GetMsgBody(i);/ 在不同的情況下,向用戶顯示不同的信息void CPop3Dlg:Disp(LONG flag)CString s;switch(flag)case S_CONNE
26、CT: /已連接到服務(wù)器,顯示信息s = 已連接到 +m_strServer+.rn;m_Info+=s;/ 禁用連接按鈕 GetDlgItem(IDC_BTN_CONN)-EnableWindow(FALSE);/ 啟用斷開(kāi)按鈕 GetDlgItem(IDC_BTN_DISC)-EnableWindow(TRUE);/ 禁用查看郵件按鈕GetDlgItem(IDC_BTN_VIEW)-EnableWindow(FALSE); break;case S_RECEIVE:/ 收到服務(wù)器發(fā)來(lái)的響應(yīng),顯示它的內(nèi)容 m_Info+=pop3Socket.lastMsg;break;case S_CLO
27、SE: / 顯示關(guān)閉連接的信息12南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)m_Info+=pop3Socket.error;s = 連接已經(jīng)關(guān)閉 rn; m_Info+=s;/ 啟用連接按鈕 GetDlgItem(IDC_BTN_CONN)-EnableWindow(TRUE);/ 禁用斷開(kāi)按鈕 GetDlgItem(IDC_BTN_DISC)-EnableWindow(FALSE);break;case S_GETNUM: /已經(jīng)知道了郵箱中信件的總數(shù)s.Format( 郵箱中共有 %d 封信 rn,pop3Socket.numMsg); m_Info+=s;break;case S_GETSIZ
28、E: / 顯示信件的大小s.Format( 信箱中信件大小為: %d字節(jié) rn,pop3Socket.sizeMsg); m_Info+=s;break;case S_ENDRETR: /所有信件已下載完畢,顯示信息s.Format( 共下載了 %d 封信件 rn,pop3Socket.msgs.size(); m_Info+=s;/ 如果有信件下載,啟用查看郵件按鈕 if(pop3Socket.msgs.size()0) GetDlgItem(IDC_BTN_VIEW)-EnableWindow(TRUE);break;UpdateData(FALSE); / 更新用戶界面/ 當(dāng)點(diǎn)擊“存儲(chǔ)”
29、按鈕時(shí),執(zhí)行此函數(shù)。void CPop3Dlg:OnBtnSave()int i;CString s;13南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)i = m_ctrList.GetCurSel();/ 獲得指定信件的基本屬性及信件內(nèi)容s = pop3Socket.GetMsgStuff(i);s += pop3Socket.GetMsgBody(i);CFileDialog dlg(FALSE); if(dlg.DoModal()=IDOK)CFile file(dlg.GetPathName(), CFile:modeCreate | CFile:modeWrite | CFile:typeBin
30、ary); file.Write(LPCSTR)s,s.GetLength();file.Close();5.2 接收郵件的步驟. 建立和服務(wù)器的連接。具體工作由 Connect 函數(shù)完成。部分 函數(shù)代碼如下所示 :BOOL CSMTP:; Connect() if(! m_wsSMTPServer Create()m_sError=_T( “無(wú)法創(chuàng)建套接字 ! ”);delete response_buf; response_buf = NULL;return FALSE;)if(! M_wsSMTPserver Connect(GetServerHostName() ,GetPort()m
31、_sError = _T( “無(wú)法連接到服務(wù)器 ”);M_sSMTPserver Close();delete response_but;Connect14response-buf = NULL;南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)return FALSEI;if(! Get_response(CONNECT_SUCCESS)m_sError = _T( “服務(wù)器投有響應(yīng) ”);M_wsSMTPServer Close();delete response_buf ;response_buf = NULL;return FALSE;)sHello Format(_T( “HELOsrn ”) ,l
32、ocal_host);m_wsSMTPServer Get(LPCTSTR)sHello ,sHello Getlength();( 2)建立連接后從服務(wù)器接收郵件。這個(gè)工作由 GetMessage函數(shù)完成。 GetMessage函數(shù)代碼如下:BOOL CSMT:P: GetMessage(CMailMessage * msg)if(! m_bConnected)m_sError = _T( “必須首先創(chuàng)建連接 ! ”) ;return FALSE;)if(FormatMailMessage(msg)=FALSE)return FALSE;)if(transmit_message(msg)=F
33、ALSE)return FALSE ; )return TRUE;)前面介紹過(guò)電子郵件有其特殊的格式, 在這里 FormatMailMessage 函數(shù)就是 用于格式化郵件信息的。 Transmit_message 函數(shù)將郵件進(jìn)到服務(wù)器上。部分 Transmit_message 函數(shù)代碼如下所示:BOOL CSMTP:transmit_message(CMailMessage *msg) sFrom Format_T( “MAIL From:srn”) ,(LPCTSTR)msg一 m_sFrom);M_wsSMTPServer Get(LPCTSTR)sFrom,sFromGctLength
34、();15南陽(yáng)理工軟件學(xué)院畢業(yè)設(shè)計(jì) (論文)if(! Get_response(GENERIC_SUCCESS)return FALSEl;for(int i=O;iGetNumRecipients(); i+)msg 一GetRecipient(sEmail , sTemp,i);sToFormat(_T( “RCPT TO;rn ”) ,(LPCTSTR)sEmail);m_wsSMTPServer Get( (LPCTSTR)sTemp,sTempGetLength();Get_response(GENERIC_SUCCESS);)sTemp=_T(“DATArn ”);m_wsSMTP
35、Server Get(LPCTSTR)sTemp,sTempGetLength();if(! Get_response(DATA_SUCCESS)return FALSE ; m_wsSMTPserver Get(LPCTSTR)msg一 m_sHeader, g 一m_sHeader GetLength();sTemp = cook_body(msg);m_wsSMTPServer Get(LPCTSTR)sTemp,sTempGetLength();sTemp = _T( “rn.rn ”);m_wsSMTPServer Get(LPCTSTR)sTemp,sTemp.GetLength();if! Get_response(GENERIC_SUCCESS)return FALSE ; Return TRUE;在此函數(shù)中,首先發(fā)送 MAIL 命令,通知服務(wù)器收信人的郵箱地址。然后發(fā) 進(jìn) RCPT命令,通知服務(wù)器發(fā)信人的郵箱地址。需要注意的是,在有多個(gè)發(fā)信人 時(shí),必須為每個(gè)發(fā)信人都發(fā)送一次 RCPT命令,通知服務(wù)器將要進(jìn)行郵件數(shù)據(jù)的 傳輸。此后,分別將郵件頭和郵件體從服務(wù)器上接收下來(lái)。這里需要注意一點(diǎn): 當(dāng)郵件數(shù)據(jù)接
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)蒙古包頭市2025屆物理高二第一學(xué)期期末統(tǒng)考試題含解析
- 2025屆江西省南昌市高二物理第一學(xué)期期中預(yù)測(cè)試題含解析
- 2025屆安徽省淮北一中高二物理第一學(xué)期期中綜合測(cè)試模擬試題含解析
- 2025屆黑龍江省虎林市高級(jí)中學(xué)高三物理第一學(xué)期期末質(zhì)量檢測(cè)試題含解析
- 福建省廈門(mén)大學(xué)附屬實(shí)驗(yàn)中學(xué)2025屆高三物理第一學(xué)期期中達(dá)標(biāo)檢測(cè)模擬試題含解析
- 2025屆日喀則市高一物理第一學(xué)期期中經(jīng)典模擬試題含解析
- 2025屆云南省南澗縣民族中學(xué)物理高二第一學(xué)期期末監(jiān)測(cè)試題含解析
- 2025屆遼寧省葫蘆島一中高二物理第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 廣東省深圳南頭中學(xué)2025屆高二物理第一學(xué)期期中統(tǒng)考試題含解析
- 2025屆河南省葉縣一高物理高三上期末調(diào)研試題含解析
- 2024-2025學(xué)年北京版小學(xué)四年級(jí)上學(xué)期期中數(shù)學(xué)試題與參考答案
- 六年級(jí)上冊(cè)道德與法治認(rèn)識(shí)居民身份證人教部編版
- 新人教PEP版(三起)三年級(jí)上冊(cè)英語(yǔ)全冊(cè)課件(2024年新版教材)
- 音樂(lè)治療導(dǎo)論智慧樹(shù)知到答案2024年湖南科技大學(xué)
- 汽車(chē)行業(yè)新能源汽車(chē)動(dòng)力系統(tǒng)技術(shù)創(chuàng)新方案
- 2024至2030年中國(guó)雙碳產(chǎn)業(yè)園(零碳園區(qū))規(guī)劃建設(shè)與投資戰(zhàn)略分析報(bào)告
- 高等教育自學(xué)考試《13683管理學(xué)原理(中級(jí))》考前模擬試卷三
- CJJT 182-2014 城鎮(zhèn)供水與污水處理化驗(yàn)室技術(shù)規(guī)范
- 2024版新教科版科學(xué)一年級(jí)上冊(cè)教學(xué)計(jì)劃含進(jìn)度表(根據(jù)新課標(biāo)編寫(xiě))
- 葛根培訓(xùn)課件
- 小學(xué)校園防欺凌班會(huì)課件
評(píng)論
0/150
提交評(píng)論