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

正文內(nèi)容

一個(gè)smtp客戶端程序的設(shè)計(jì)與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文(已改無錯(cuò)字)

2023-01-11 11:23:40 本頁面
  

【正文】 String filename):該方法的作用是添加根據(jù)參數(shù)提供的文件名稱,把該文件當(dāng)成附件添加到當(dāng)前的郵件中。返回值為郵件中已有的附件的個(gè)數(shù)。該方法有一個(gè)重載方法,參數(shù)為 CMIMEMessage*,作用是把一個(gè)附件添加到當(dāng)前 郵件。返回值與該方法 意義相同 。 2) public int GetAttachmentNum():該方法的作用是獲取當(dāng)前附件的個(gè)數(shù)。 3) public int GetNumberRecipients(RECIPIENTS_TYPE type=TO):作用是獲取當(dāng)前的接收者的數(shù)目。參數(shù)是接收者的類型,默認(rèn)值是 TO 類型,意為普通的接收者。參數(shù) type 是個(gè) enum RECIPIENT_TYPE 類型的變量,有三個(gè)合法值,分別為: TO,CC,BCC。分別代表:普通接收者,抄送和密送。對于后兩個(gè)值,本版本沒有提供支持 。 4) BOOL AddRecipient(LPCTSTR szEmailAddress , LPCTSTR szFriendlyName= , RECIPIENTS_TYPE type=TO):作用是向郵件添加接收者信息。默認(rèn)的接收者類型為 TO,也是當(dāng)前版本唯一能夠支持的類型。szEmailAddress 表示郵件的地址, szFriendlyName 表示名稱。 5) public void AddToHeader(CString sTemp):該方法作用是向郵件添加頭信息。傳遞的參數(shù)為要向郵件添加的頭 信息。 6) public virtual void PrepareHeader():本方法的作用是根據(jù)對象本身的成員變量來生成郵件頭。根據(jù) SMTP 協(xié)議的規(guī)定,郵件的頭包括: From、 To(可重復(fù)多次 )、 Subject、 Date、 XMailer、 MIMEVersion: 、 Contenttype 等多 個(gè)域。這些域構(gòu)成了郵件頭的信息。只有正確包含上述域的郵件才能被郵件服務(wù)器接收。這些域的生成均包含在了該方法的實(shí)現(xiàn)中,通過調(diào)用該方法就可以獲得一個(gè)滿足 SMTP 協(xié)議要求的郵件頭。 7) public virtual void PrepareBody():該方法的作用是生成一個(gè)滿足SMTP 協(xié)議的郵件體。根據(jù) SMTP 協(xié)議的規(guī)定:郵件的正文和附件消息均要滿足固定的格式。并且郵件正文與附件、附件與附件之間要有正確的分隔標(biāo)志。該方法中規(guī)定的郵件分隔標(biāo)志為 BOUNDARY,該標(biāo)志由 PrepareHeader()方法中定義。在方法中,根據(jù)當(dāng)前添加的郵件附件的個(gè)數(shù)來添加標(biāo)志。所有附件添加結(jié)束后,會(huì)添加一個(gè)為“ BOUNDARY”的結(jié)束符號。標(biāo)志郵件正文的結(jié)束。 三、 CMIMEMessage 子模塊:該模塊用于表示郵 件的附件。使用該類可以根據(jù)提供的文件名讀取出正確的文件,保存文件名和標(biāo)題。并提供了能夠取出這些屬性的方法。其類圖 如圖 6所示。 圖 6 CMIMEMessage類圖 成員變量說明 : 1) protected CString m_Filename:保護(hù)成員變量,表示附件所代表的文件的文件名。添加到郵件時(shí)使用。 2) protected CString m_FileContent、 TCHAR * m_ContentBuffer:保護(hù)成員變量,表示附件所代表的文件的內(nèi)容。 3) protected DWORD bufLen:保護(hù)成員變量 ,表示當(dāng)前附件的長度,單位是字節(jié)。 成員 函數(shù) 說明: 1) public BOOL Attach(const CString amp。sFilename):該方法的作用是根據(jù)傳遞進(jìn)來的參數(shù)文件名,來把本地文件中的內(nèi)容讀取出來,并添加到當(dāng)前附件對象中。并且根據(jù)傳遞進(jìn)來的參數(shù),分別給 bufLen、 m_FileContent、 m_Filename、m_Title 等成員變量賦值。如果附件添加成功,則返回 TRUE;否則返回 FALSE。 2) public CString GetFilename() 、 CString GetTitle() 、 CString GetContent()、 TCHAR * GetContentBuffer()、 DWORD GetBufferLength():上述 方法作用分別為獲取附件名稱、附件標(biāo)題、附件內(nèi)容(以字符串形勢返回)、附件內(nèi)容(以數(shù)組方式返回)、附件的長度。為類的調(diào)用者提供了統(tǒng)一的操作接口。 四、 CBASE64 子模塊:在 SMTP 的相關(guān)協(xié)議中規(guī)定,對于身份驗(yàn)證的用戶名、密碼、郵件的正文以及附件的內(nèi)容均要采用 BASE64 的方式進(jìn)行編碼。該類就是對 BASE64 的算法 進(jìn)行的封裝。提供了對兩種數(shù)據(jù)源的加密操作和一種解密操作。其類圖 如圖 7所示。 圖 7 CBASE64類圖 成員變量說明: 1) static CString base64:該變量是歸類所屬的成員變量。表示 BASE64編碼所使用的字符表。 2) private CString sEncode 、 CString sDecode:表示編碼和解碼的數(shù)據(jù)。 成員 函數(shù) 說明: 1) public DWORD CBASE64::ComputeLen(DWORD size):該方法的作用是計(jì)算編碼后數(shù)據(jù)的長度 。參數(shù)為編碼前的長度,返回值為編碼后的長度。 2) TCHAR * CBASE64::Encode(TCHAR* buf , DWORD nSize):該方法的作用是對制定的數(shù)據(jù)進(jìn)行編碼。參數(shù) TCHAR *buf 表示要進(jìn)行編碼的數(shù)據(jù)的首地址,參數(shù) DWORD nSize 則表示要編碼的長度。本方法根據(jù) BASE64 編碼的定義,對數(shù)據(jù)進(jìn)行了編碼。本類為該方法提供了一個(gè)重載的方法,其參數(shù)為 CString szEncoding 和 int nSize。參數(shù) szEncoding 表示要進(jìn)行編碼的數(shù)據(jù)源,而參數(shù)int nSize 表示要進(jìn)行編碼的長度。在兩種方法中,返回值均為編碼后的數(shù)據(jù)。 3) char * CBASE64::GetTempSecret(CString sTemp , int amp。length):根據(jù) BASE64 編碼方式的定義,在解碼過程中,要先把要編碼后的數(shù)據(jù)根據(jù) BASE64的對應(yīng)表變換成編碼時(shí)所得到的中間碼。該方法就是根據(jù)編碼后的數(shù)據(jù)得到中間碼的操作。參數(shù) CString sTemp 和 int amp。length 分別為要解碼的數(shù)據(jù)和長度。 4) CString CBASE64::Decode(CString szDecoding , int nSize):該方法 的作用是根據(jù)傳遞進(jìn)來的參數(shù)對數(shù)據(jù)進(jìn)行解碼。 實(shí)現(xiàn)軟件的界面類 方便的用戶界面是用戶能夠方便操作最基本保證。一個(gè)良好的界面能夠帶給用戶以愉快的使用體驗(yàn),從而會(huì)加大對作品的喜愛程度。目前的版本中與界面有關(guān)的類有三個(gè): CMyEMailApp 、 CMyEMailDlg 、 CAboutDlg。這三個(gè)類均由 IDE環(huán)境的 AppWizard 功能導(dǎo)航完成。在 VC 中,有三種應(yīng)用程序模式可供選擇,分別為:基于對話框的應(yīng)用程序、單文檔模式的應(yīng)用程序、多文檔模式的應(yīng)用程序。本軟件采用的是第一種。三個(gè)類的作用如下: CMyEMailApp 類:該類由 CWinApp 繼承而來,具有父類的所有特性。代表當(dāng)前的應(yīng)用程序。使用該類定義的全局對象會(huì)由 MFC的框架自動(dòng)傳遞給隱藏的方法。這個(gè)類定義的對象可以說是程序的入口點(diǎn) (并不是真正的入口,真正的入口是 WinMain 函數(shù) )。通過隱藏的操作自動(dòng)調(diào)用該類的初始化方法 InitInstance就會(huì)初始化應(yīng)用程序。定義一個(gè)該類的全局對象是程序能夠運(yùn)行與否的關(guān)鍵部分。 CMyEMailDlg 類:該類與用戶操作的主界面相對應(yīng)。用于提供美觀、方便操作 的界面給用戶使用并保存用戶輸入的數(shù)據(jù)。提供了與郵件操作有關(guān)的按鈕等觸發(fā)器并定義了操作的具體處理方式。該類是本軟件的操作平臺。它與用戶直接進(jìn)行交互,該界面是否友好,直接影響到用戶體驗(yàn)。該對話框資源如圖 8 所示。 圖 8 程序主界面 CAboutDlg 類:該類與關(guān)于對話框相對應(yīng)。其對應(yīng)的對話框資源如圖 9 所示。 圖 9 關(guān)于對話框 模塊之間的關(guān)系 本軟件是由各個(gè)工具類和界面類兩個(gè)大部分構(gòu)成的。其中界面類由 MFC 自動(dòng)創(chuàng)建,而工具類則由作者設(shè)計(jì)完成,整個(gè)軟件的開發(fā)過程就是把工具類添加進(jìn)界面類并使 之能夠協(xié)調(diào)工作的過程 ( 開發(fā)者的工作都是這樣)。正如上節(jié)提到的 ,CMyEMailApp 是整個(gè)應(yīng)用程序的入口,在其初始化操作中調(diào)用了 CMyEMailDlg 的相關(guān)方法,生成主界面對話框。在主界面對話框的相關(guān)事件處理方法中,會(huì)調(diào)用CSMTP 的連接和傳送消息方法,并把用戶輸入的數(shù)據(jù)裝配為一個(gè)完整的CMailMessage 消息供 CSMTP 使用。而如果在存在附件的情況下, CMailMessage類型的消息則會(huì)包含一個(gè) CMIMEMessage 類型的附件。在 CSMTP 和 CMailMessage中又會(huì)看到,它們對 CBASE64 類的調(diào)用。整個(gè)軟件就是由這樣的一些類有機(jī)“堆砌”而成。 類的關(guān)系圖如圖 10所示。 圖 10 類關(guān)系圖 核心模塊實(shí)現(xiàn)與核心功能編 碼 在 ,已經(jīng)對所有的模塊的功能以及相互關(guān)系進(jìn)行了介紹,那么下面將對其中的核心功能進(jìn)行描述。 郵件發(fā)送實(shí)現(xiàn) 在郵件發(fā)送之前首先要與服務(wù)器建立連接,該操作由 CSMTP 類的 Connect 操作完成。該方法根據(jù)用戶輸入的參數(shù),調(diào)用底層 API連接到服務(wù)器,連接失敗返回 FALSE,連接成功則返回 TRUE。 //首先要建立接收消息緩沖區(qū),接收服務(wù)器的消息 thisresponseBuf = new TCHAR[RESPONSE_BUFFER_SIZE]。 //創(chuàng)建連接,成功繼續(xù)執(zhí)行,失敗則返回。 if( !this()) //用用戶指定的服務(wù)器和端口號碼連接到服務(wù)器,成功繼續(xù)執(zhí)行 ; 失敗返回 if( !this(p,thisGetPort())) //接收服務(wù)器發(fā)送的消息代碼,為 220 說明服務(wù)器接受了請求,否則出錯(cuò) if(!thisGetResponse(SMTP_SERVER_READY) ) //發(fā)送 EHLO 命令給服務(wù)器,要求建立一條通信通道 (EHLO %s\r\n , localHostName)。 this((LPCTSTR)helloCommand,gth())。if( !thisGetResponse(SMTP_SERVER_TASK_FINISH) ) 如果在上述過程中沒有出錯(cuò),那么就得到了一條客戶端與服務(wù)器進(jìn)行信息交互的通道。 利用該通道就可以進(jìn)行郵件傳送操作了。綜上所述,建立與服務(wù)器連接過程程序流程圖如圖 11所示。 圖 11 建立與服務(wù)器連接算法流程圖 通過上述操作。連接建立結(jié)束。接下來的工作就是傳送數(shù)據(jù)了。相關(guān)的操作是在 CSMTP 類中的 TransmitMessage 方法中完成的。方法如下: //首先判斷連接是否已經(jīng)建立 //如果連接已經(jīng)建立,那么就繼續(xù)進(jìn)行下面的操作;否則返回錯(cuò)誤信息 if( !thism_bConnected ) //發(fā)送身份驗(yàn)證命令。發(fā)送后等待服務(wù)器的回復(fù),如果回復(fù)為 AUTH_OK, //那么繼續(xù)下面的操作,否則返回錯(cuò)誤信息 ( _T(AUTH LOGIN\r\n) ) 。 this( (LPCTSTR)sAuth , () )。 if( !thisGetResponse(AUTH_OK) ) //使用 CBASE64 對用戶名進(jìn)行加密并發(fā)送 CString username = ( sFrom , () )+\r\n 。 this((LPCTSTR)username , ())。 if( !thisGetResponse(AUTH_OK) ) //使用 CBASE64 對密碼進(jìn)行加密并發(fā)送 ,如果驗(yàn)證成功,服務(wù)器會(huì)返回 //AUTH_SUCCESSFULLY 來標(biāo)識。否則返回錯(cuò)誤。 password = (password , ())+\r\n。 this((LPCTSTR)password , ())。 if( !thisGetResponse(AUTH_SUCCESSFULLY) ) //接下來發(fā)送 MAIL FROM: SOURCE命令; //RCPT TO:Destination命令; //DATA 命令,當(dāng) DATA 命令傳送結(jié)束后就是對郵件內(nèi)容的傳遞。 sTemp = _T(Data\r\n)。 this( (LPCTSTR)sTemp , () )。 if(!thisGetResponse(DATA_IMMEDIATE)){ return FALSE。 } //在郵件內(nèi)容的末尾,是規(guī)定的格式“ \r\n.\r\n” ,當(dāng)服務(wù)器接收到這些字符時(shí)就會(huì)知道,郵件內(nèi)容的傳送已經(jīng)結(jié)束了。 sTemp = _T(\r\n.\r\n)。//結(jié)束符號 this( (LPCTSTR)s
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1