#基于POP3協(xié)議的電子郵件接收程序的設計論文_第1頁
#基于POP3協(xié)議的電子郵件接收程序的設計論文_第2頁
#基于POP3協(xié)議的電子郵件接收程序的設計論文_第3頁
#基于POP3協(xié)議的電子郵件接收程序的設計論文_第4頁
#基于POP3協(xié)議的電子郵件接收程序的設計論文_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、學 號:068108210南陽理工學院畢業(yè)設計論文目題目基于 POP3 協(xié)議的電子郵件接收程序的設計2012 年 3 月 26 日錄摘學院軟件學院要 專業(yè)軟件工程1、班級08 級軟件工程 7 班引姓名王志杰言1.1指導教師劉凱課程設計 TOC o 1-5 h z 的內容 2 HYPERLINK l bookmark10 o Current Document 課程設計的要求 2 HYPERLINK l bookmark12 o Current Document 2、設計平臺簡介 2VC+ 2 HYPERLINK l bookmark16 o Current Document 3、郵件接收協(xié)議 4

2、 HYPERLINK l bookmark18 o Current Document POP3 簡介 4 HYPERLINK l bookmark22 o Current Document 4、設計原理 7 HYPERLINK l bookmark24 o Current Document POP3 交互模型 7 HYPERLINK l bookmark26 o Current Document 5、課程設計步驟 8 HYPERLINK l bookmark28 o Current Document 函數(shù)構造 8 HYPERLINK l bookmark30 o Current Documen

3、t 接收郵件的步驟 14 HYPERLINK l bookmark32 o Current Document 6、測試 18 HYPERLINK l bookmark34 o Current Document 測試目的 18南陽理工軟件學院畢業(yè)設計 (論文) HYPERLINK l bookmark36 o Current Document 測試環(huán)境 18 HYPERLINK l bookmark38 o Current Document 測試結果 18 HYPERLINK l bookmark40 o Current Document 結果分析 19 HYPERLINK l bookmark

4、42 o Current Document 7、出現(xiàn)的問題及解決方法 19 HYPERLINK l bookmark44 o Current Document 設計中出現(xiàn)的問題 19 HYPERLINK l bookmark46 o Current Document 解決方法 19 HYPERLINK l bookmark48 o Current Document 參考文獻 19摘要電子郵件可以使人們有效地進行電子化的數(shù)據(jù)異地交換。 Internet 以電子 郵件服務推動著人類的通信行為不斷發(fā)展, 郵件的接收系統(tǒng)。本論文以 Visual C# 為開發(fā)平臺,利用 Socket 套接字編程,實現(xiàn)了

5、基于 POP3協(xié)議的郵件接收程序, 介紹了 POP3協(xié)議的原理及電子郵件接收程序的設計和實現(xiàn)方法。隨著 Internet/Intranet 的迅猛發(fā)展,電子郵件( E-Mail )已成為因特網(wǎng)上 非常流行、非常方便的通信方式。 電子郵件技術不斷進步, 郵件協(xié)議也不斷發(fā)展。 目前使用最廣泛的電子郵件收件協(xié)議是 POP3。本文采用微軟最新的 .NET技術,以 Visual C# 為開發(fā)平臺,利用 Socket 套接字編程開發(fā)了基于 POP3協(xié)議的郵件接收 程序,現(xiàn)對相關原理及具體設計進行討論。關鍵詞 課程設計;電子郵件;接收程序; POP3;Socket ;Visual C#南陽理工軟件學院畢業(yè)設

6、計 (論文)1、引言隨著 Internet/Intranet的迅猛發(fā)展,電子郵件( E-Mail )已成為因特網(wǎng)上非常流行、非常方便的通信方式。 電子郵件技術不斷進步, 郵件協(xié)議也不斷發(fā)展。 目前使用最廣泛的電子郵件收件協(xié)議是 POP3。本文采用微軟最新的 .NET技術,以 Visual C# 為開發(fā)平臺,利用 Socket 套接字編程開發(fā)了基于 POP3協(xié)議的郵件接收 程序,現(xiàn)對相關原理及具體設計進行討論。1.1 畢業(yè)設計的內容運用 C#語言設計一個郵件程序實現(xiàn)郵件的接收1.2 畢業(yè)設計的要求(1)按要求編寫課程設計報告書,能正確闡述設計結果。(2)通過課程設計培養(yǎng)學生嚴謹?shù)目茖W態(tài)度,認真的

7、工作作風和團隊協(xié)作 精神。(3)學會文獻檢索的基本方法和綜合運用文獻的能力。(4)在老師的指導下,要求每個學生獨立完成課程設計的全部內容。2、設計平臺簡介Visual C#( 1)背景VC+是微軟公司開發(fā)的一個 IDE(集成開發(fā)環(huán)境 ), 換句話說 , 就是使用 C+的 一個開發(fā)平臺。 VC+是 Windows 平臺上的 C+編程環(huán)境,學習 VC 要了解很多 Windows平臺的特性并且還要掌握 MFC、ATL、COM等的知識,難度比較大。Windows 下編程需要了解 Windows的消息機制以及回調( callback )函數(shù)的原理; MFC是 Win32API 的包裝類,需要理解文檔視圖

8、類的結構,窗口類的結構,消息流向等 等; COM是代碼共享的二進制標準,需要掌握其基本原理等等。南陽理工軟件學院畢業(yè)設計 (論文)Visual C# 作為 Visual Studio 的一個組件,可以通過安裝 Visual Studio 來獲得。 VC 作為一個主流的開發(fā)平臺一直深受編程愛好者的喜愛,但是很多人 卻對它的入門感到難于上青天, 究其原因主要是大家對他錯誤的認識造成的, 嚴 格的來說 VC+不是門語言,雖然它和 C+之間有密切的關系 , 如果形象點比喻的 話,可以把 C+看作為一種 “工業(yè)標準 ”,而 VC+則是某種操作系統(tǒng)平臺下的 “廠 商標準”,而“廠商標準 ”是在遵循“工業(yè)標

9、準”的前提下擴展而來的。 ( 2)基本模式Visual C# 使用程序的開發(fā)主要有兩種模式,一種是 WIN API 方式,另一種 則是 MFC方式。 VC基于 C,C+語言,主要由是 MFC組成,是和系統(tǒng)聯(lián)系非常緊 密的編程工具,它兼有高級,和低級語言的雙重性,功能強大,靈活,執(zhí)行效率 高,幾乎可說 VC在 Windows 平臺無所不能。最大缺點是開發(fā)效率不高。 ( 3)適用范圍 【 1】1、VC 主要是針對 Windows系統(tǒng),適合一些系統(tǒng)級的開發(fā),可以方便實現(xiàn) 一些底層的調用。在 VC里邊嵌入?yún)R編語言很簡單。2、VC 主要用在驅動程序開發(fā)。3、VC執(zhí)行效率高 ,當對系統(tǒng)性能要求很高的時候,

10、可用 VC開發(fā)。4、VC 主要適用于游戲開發(fā)。5、VC 多用于單片機,工業(yè)控制等軟件開發(fā),如直接對 I/O 地址操作,就 要用 C+。6、VC 適用開發(fā)高效,短小,輕量級的 COM組件 ,DLL。比如 WEB上的控件。7、VC 可以開發(fā)優(yōu)秀的基于通信的程序。8、VC 可以開發(fā)高效靈活的文件操作程序。9、VC 可以開發(fā)靈活高效的數(shù)據(jù)庫操作程序。10、VC是編 CAD軟件的唯一選擇。包括 AUTOCA,DUG的二次開發(fā)。11、VC 在多線程、網(wǎng)絡通信、分布使用方面, VC+有不可比擬的優(yōu)勢。3南陽理工軟件學院畢業(yè)設計 (論文)3、郵件接收協(xié)議POP3 簡介POP3( Post Office Pro

11、tocol Version 3),即郵局辦公協(xié)議,該協(xié)議用于接收郵件的雙方( 客戶機、 POP3服務器)進行通信。使用該協(xié)議,用戶可以脫 機閱讀信件,而不必把客戶機長期連接到網(wǎng)絡上,以減少網(wǎng)絡費用。POP3協(xié)議允許用戶以一定的方式從保存郵件的服務器 ( 即 POP3服務器) 上取走自己的郵 件。3.2 POP3 協(xié)議工作原理 【2】POP3提供了一種客戶機 /服務器脫機模型, 客戶機通過向服務器發(fā)送一些命 令來完成相應的操作。 客戶機能夠發(fā)送的命令和它所處的狀態(tài)有關。 協(xié)議中定義 了三種狀態(tài):即確認狀態(tài)( Authorization State )、處理狀態(tài)(Transaction State

12、 ) 和更新狀態(tài)( Update State )。在不同的狀態(tài)下,客戶機可以向服務器發(fā)送的命 令是有區(qū)別的,某些命令還會導致狀態(tài)的轉換。 POP3交互過程中的常用命令和 狀態(tài)轉換如圖 3.2.1 和表 3.2.1 所示。南陽理工軟件學院畢業(yè)設計 (論文)圖 3.2.1 POP3 的狀態(tài)轉換示意圖南陽理工軟件學院畢業(yè)設計 (論文)表 3.2.1 一些常用的 POP3命令POP3服務器一般使用的是 TCP的 110 號端口。當客戶機和服務器建立 TCP 連接時, POP3服務器向客戶機發(fā)回一個問候,交互過程即進入確認狀態(tài)。此時, 若客戶機提供了自己的身份并成功確認, 即由確認狀態(tài)轉入處理狀態(tài); 在

13、這個狀 態(tài),用戶可用相應的命令處理自己的郵件。 在完成相應的處理過程后客戶機發(fā)出 QUIT 命令,則進入更新狀態(tài);在此狀態(tài)下, POP3服務器釋放郵件資源并返回一 個告別響應;最后關閉 TCP連接。通過 POP3命令查詢電子郵件時,客戶機可以下載指定的郵件,然后對郵件 進行刪除或修改操作都無需和服務器進一步交互。 客戶機向服務器發(fā)送命令并等 待響應, POP3命令采用命令行形式,用 ASCII 碼表示。服務器響應是由一行或 多行組成,其中,第一行以 ASCII 文本 +OK, 或-ERR開始,分別指出相應的操作 是成功還是失敗。POP3命令包含一個大小寫無關的關鍵字和一個或多個參量,所有的命令

14、以 回車換行符)作為其結束標志。關鍵字和參量必須是非控制符的 ASCII 碼字符。 關鍵字和參量之間, 參量和參量之間由一個空格字符分隔開。 關鍵字長 不大于四個字符,每個參量最長可到 40 個字符。南陽理工軟件學院畢業(yè)設計 (論文)POP3響應包含一個狀態(tài)標志和一個跟隨其后的附加信息。 響應也用 作為其結束標志。 響應最長到 512字節(jié),其中包括 議定義了兩個狀態(tài) 標志:正確(“ +OK”)和錯誤(“ -ERR”)。服務器用大寫格式發(fā)送“ +OK” 和“ -ERR”。如果響應是多行的,則每行以 束。當響應的所有行被 發(fā)送后,接著發(fā)送多行響應的結束標志行,該行僅包含一個句點“ . ”和一個 【

15、3】。4、設計原理4.1 POP3 交互模型初始化連接斷開連接該模型基本原理為: POP3接收P者O對P3接PO收P3者發(fā)送者進行初始化連接,發(fā)送者對接收者發(fā)送詢問指令READ”Y , 接收者則向發(fā)送者提交所要接收數(shù)據(jù)的要求, 送者做出回應,并發(fā)送數(shù)據(jù)。接收者則開始接收數(shù)據(jù)。發(fā)送者發(fā)送完數(shù)據(jù)后,提 出斷開請求,并斷開連接。數(shù)據(jù)接收過程完成。南陽理工軟件學院畢業(yè)設計 (論文)5、課程設計步驟5.1 函數(shù)構造Windows Socket類是對Windows Socket API 的封裝,其中包括, CSocket和 cAsyncSocket 類,使用它們能夠大大簡化網(wǎng)絡通信程序的編寫。 套接字的數(shù)

16、據(jù)結 構中包括下面五種數(shù)據(jù) :本機主機端口:接收報文或數(shù)據(jù)報的進程。本機主機地址:接收數(shù)據(jù)包的主機。遠地協(xié)議端口:目的進程或程序。遠地主機端口:目的主機。協(xié)議:程序在網(wǎng)絡上傳輸數(shù)據(jù)時使用的協(xié)議。本使用程序就是使用 Windows sockets 編程設計的。在接收電子郵件時, 必然需要涉及到連接服務器,接收數(shù)據(jù),接收響應以及斷 開等一系列操作 這就需要設計一個類來封裝這些操作, 在該使用程序中制定了 一個CSMT類P 。該類的定義如下所示,#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è)設計 (論文));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 成員代表錯誤信息, m_bConnected表示是否建立連接 ;m_bPort 表示 SMTP服務器所使用的端口號, m_sSMTPserverHostNam表e示SMTP服務器的主9南陽理工軟件

20、學院畢業(yè)設計 (論文)機名(地址);m_waSMTPserver則為將和 SMTP服務器建立連接的套接字對象 ;response_table 表示由服務器返回的響應, 而eResponse列舉了所有可能出現(xiàn) 的錯誤。因為電子郵件有其特殊的結構, 不單簡單地將其作為文本進行處理。例如,郵 件必須在郵件頭和郵件體后發(fā)送,而在收信時,先需要分析郵件頭和郵件 體 CMailMessage類是對郵件進行格式化編碼的一個類 【4】。CSMT類P 的構造函數(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;在這里調用 AfxsocketInit 函數(shù)以初始化 Window Sockets 類的使用,此外還驗 證其他類成員是否合法,或為其賦值。#include mySock.h / 添加套接字類的包含文件class CPop3Dlg : public CDialog/ Constructionp

22、ublic:void Disp(LONG flag); / 在不同的會話階段顯示不同的信息 mySock pop3Socket; / 套接字類對象實例 CPop3Dlg(CWnd* pParent = NULL); / standard constructor(2)pop3Dlg.cpp 實現(xiàn)文件#include stdafx.h#include pop3.h10南陽理工軟件學院畢業(yè)設計 (論文)#include pop3Dlg.h#include mySock.h / 手工添加的包含語句BOOL CPop3Dlg:OnInitDialog() / TODO: Add extra initia

23、lization here / 用戶在這里添加控件成員變量的初始化代碼服務器地址 郵箱的用戶名 口令 下載郵件后不刪除 多文本框清空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ù)的代碼/ 當用戶點擊 連接按鈕時,執(zhí)行此函數(shù)void CPo

24、p3Dlg:OnBtnConn()/ 設定 pop3類的對話框指針變量,使之指向本對話框,以便傳遞信息 pop3Socket.SetParent(this);UpdateData(TRUE);/取來用戶在對話框中輸入的數(shù)據(jù)pop3Socket.Create();/創(chuàng)建套接字對象的底層套接字pop3Socket.Connect(LPCSTR)m_strServer,110); / 連接 pop3服務器 m_Info = ;/ 多文本列表框清空UpdateData(FALSE); / 更新用戶界面/ 當用戶點擊 斷開按鈕時,執(zhí)行此函數(shù)void CPop3Dlg:OnBtnDisc()11南陽理工軟

25、件學院畢業(yè)設計 (論文)pop3Socket.Close();/ 當用戶點擊 查看郵件 按鈕時,執(zhí)行此函數(shù)void CPop3Dlg:OnBtnView()int i;i = m_ctrList.GetCurSel(); /獲得用戶在組合框中的選擇/ 獲得并顯示指定信件的基本屬性及信件內容 m_Info += pop3Socket.GetMsgStuff(i);m_Info += pop3Socket.GetMsgBody(i);/ 在不同的情況下,向用戶顯示不同的信息void CPop3Dlg:Disp(LONG flag)CString s;switch(flag)case S_CONNE

26、CT: /已連接到服務器,顯示信息s = 已連接到 +m_strServer+.rn;m_Info+=s;/ 禁用連接按鈕 GetDlgItem(IDC_BTN_CONN)-EnableWindow(FALSE);/ 啟用斷開按鈕 GetDlgItem(IDC_BTN_DISC)-EnableWindow(TRUE);/ 禁用查看郵件按鈕GetDlgItem(IDC_BTN_VIEW)-EnableWindow(FALSE); break;case S_RECEIVE:/ 收到服務器發(fā)來的響應,顯示它的內容 m_Info+=pop3Socket.lastMsg;break;case S_CLO

27、SE: / 顯示關閉連接的信息12南陽理工軟件學院畢業(yè)設計 (論文)m_Info+=pop3Socket.error;s = 連接已經關閉 rn; m_Info+=s;/ 啟用連接按鈕 GetDlgItem(IDC_BTN_CONN)-EnableWindow(TRUE);/ 禁用斷開按鈕 GetDlgItem(IDC_BTN_DISC)-EnableWindow(FALSE);break;case S_GETNUM: /已經知道了郵箱中信件的總數(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); / 更新用戶界面/ 當點擊“存儲”

29、按鈕時,執(zhí)行此函數(shù)。void CPop3Dlg:OnBtnSave()int i;CString s;13南陽理工軟件學院畢業(yè)設計 (論文)i = m_ctrList.GetCurSel();/ 獲得指定信件的基本屬性及信件內容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 接收郵件的步驟. 建立和服務器的連接。具體工作由 Connect 函數(shù)完成。部分 函數(shù)代碼如下所示 :BOOL CSMTP:; Connect() if(! m_wsSMTPServer Create()m_sError=_T( “無法創(chuàng)建套接字 ! ”);delete response_buf; response_buf = NULL;return FALSE;)if(! M_wsSMTPserver Connect(GetServerHostName() ,GetPort()m

31、_sError = _T( “無法連接到服務器 ”);M_sSMTPserver Close();delete response_but;Connect14response-buf = NULL;南陽理工軟件學院畢業(yè)設計 (論文)return FALSEI;if(! Get_response(CONNECT_SUCCESS)m_sError = _T( “服務器投有響應 ”);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)建立連接后從服務器接收郵件。這個工作由 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;)前面介紹過電子郵件有其特殊的格式, 在這里 FormatMailMessage 函數(shù)就是 用于格式化郵件信息的。 Transmit_message 函數(shù)將郵件進到服務器上。部分 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è)設計 (論文)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 命令,通知服務器收信人的郵箱地址。然后發(fā) 進 RCPT命令,通知服務器發(fā)信人的郵箱地址。需要注意的是,在有多個發(fā)信人 時,必須為每個發(fā)信人都發(fā)送一次 RCPT命令,通知服務器將要進行郵件數(shù)據(jù)的 傳輸。此后,分別將郵件頭和郵件體從服務器上接收下來。這里需要注意一點: 當郵件數(shù)據(jù)接

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論