ASP.NET郵件收發(fā)系統(tǒng)計算機與軟件工程專業(yè)畢業(yè)設計畢業(yè)論文.doc
《ASP.NET郵件收發(fā)系統(tǒng)計算機與軟件工程專業(yè)畢業(yè)設計畢業(yè)論文.doc》由會員分享,可在線閱讀,更多相關《ASP.NET郵件收發(fā)系統(tǒng)計算機與軟件工程專業(yè)畢業(yè)設計畢業(yè)論文.doc(35頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、長沙航空職業(yè)技術學院畢業(yè)設計 目目 錄錄 1 1 緒論緒論3 1.1 電子郵件介紹3 1.1.1 介紹3 1.2 開發(fā)背景4 1.3 課題研究方法4 1.4 開發(fā)環(huán)境及運行環(huán)境4 1.4.1 開發(fā)環(huán)境.4 1.4.2 運行環(huán)境.4 2 2 郵件收發(fā)系統(tǒng)設計郵件收發(fā)系統(tǒng)設計5 2.1 軟件架構及系統(tǒng)用例圖5 2.1.1 系統(tǒng)架構.5 2.1.2 系統(tǒng)總體用例.6 2.1.3 程序功能框圖.6 3 3 電子郵件的標準格式電子郵件的標準格式 (RFC(RFC 822)822).7 3.1 RFC 822 簡介.7 3.2 信件的頭部7 3.2.1 信頭的一般格式.7 3.2.2 結構化字段和非結構化
2、字段.8 3.2.3 信頭字段的元素.8 3.2.4 標準的信頭字段9 3.3 SMTP 協(xié)議簡介及工作原理.12 3.3.1 介紹.12 3.3.2 SMTP 模型12 3.4 SMTP 協(xié)議的命令和應答.13 3.4.1 SMTP 協(xié)議的命令13 3.4.2 SMTP 的應答碼14 4 4 重要模塊設計重要模塊設計.16 4.1 用戶登錄模塊16 4.2 用戶郵箱主頁16 4.3 收件箱16 4.4 發(fā)件箱17 4.5 刪除郵件17 4.6 通訊錄17 4.7 草稿箱17 4.8 新建聯(lián)系人18 4.9 寫信18 ASP.NET 郵件收發(fā)系統(tǒng) 4.10 郵件轉發(fā)18 5 5 主要功能介紹主
3、要功能介紹.19 5.1 用戶登錄模塊19 5.2 框架的搭建20 5.2.1 主要架構:20 5.2.2 友情鏈接圖片 Log 及鏈接:20 5.3 收件箱21 5.4 郵件發(fā)送23 5.4.1 發(fā)送郵件的主要代碼:23 5.4.2 發(fā)送附件代碼:24 5.5 刪除郵件27 5.5.1 獲取要刪除的信息字段 ID:.27 5.5.2 刪除數(shù)據(jù)庫中的數(shù)據(jù):28 5.6 通訊錄28 5.6.1 綁定通訊錄:.28 5.6.2 刪除聯(lián)系人:29 5.7 草稿箱29 5.7.1 草稿箱的數(shù)據(jù)綁定:29 5.7.2 草稿箱數(shù)據(jù)的刪除:30 5.8 聯(lián)系人30 5.9 郵件轉發(fā)30 6 6 數(shù)據(jù)庫設計數(shù)
4、據(jù)庫設計31 6.1 登錄系統(tǒng)31 6.2 收件箱32 6.3 發(fā)件箱32 6.4 聯(lián)系人33 7 7 結論結論.33 8 8 參考文獻參考文獻33 9 9 致謝致謝.34 長沙航空職業(yè)技術學院畢業(yè)設計 1 緒論 1.1 電子郵件介紹 1.1.1 介紹 電子郵件(簡稱 E-mai1)又稱電子信箱、電子郵政,它是種用電子手段提供信息 交換的通信方式。它是全球多種網(wǎng)絡上使用最普遍的一項服務。這種非交互式的通信, 加速了信息的交流及數(shù)據(jù)傳送,它是個簡易、快速的方法。通過連接全世界的 Internet,實現(xiàn)各類信號的傳送、接收、存貯等處理,將郵件送到世界的各個角落。到 目前為止,可以說電子郵件是 In
5、ternet 資源使用最多的一種服務,E-mai1 不只局限于 信件的傳遞,還可用來傳遞文件、聲音及圖形、圖像等不同類型的信息。 電子郵件不是一種“終端到終端”的服務,是被稱為“存貯轉發(fā)式”服務。這正是 電子信箱系統(tǒng)的核心,利用存貯轉發(fā)可進行非實時通信,屬異步通信方式。即信件發(fā) 送者可隨時隨地發(fā)送郵件,不要求接收者同時在場,即使對方現(xiàn)在不在,仍可將郵件 立刻送到對方的信箱內(nèi),且存儲在對方的電子郵箱中。接收者可在他認為方便的時候讀 取信件,不受時空限制。在這里,“發(fā)送”郵件意味著將郵件放到收件人的信箱中,而 “接收”郵件則意味著從自己的信箱中讀取信件,信箱實際上是由文件管理系統(tǒng)支持的 個實體。因
6、為電子郵件是通過郵件服務器(mai1 server)來傳遞檔的。通常 mail server 是執(zhí)行多任務操作系統(tǒng) UNIX 的計算機,它提供 24 小時的電子郵件服務,用戶只 要向 mail server 管理人員申請個信箱賬號,就可使用這項快速的郵件服務。 電子郵件的工作原理: 1) 電子郵件系統(tǒng)是一種新型的信息系統(tǒng),是通信技術和計算機技術結合的產(chǎn)物。 電子郵件的傳輸是通過電子郵件簡單傳輸協(xié)議(Simple Mail Transfer Protocol, 簡稱 SMTP)這一系統(tǒng)軟件來完成的,它是 Internet 下的一種電子郵件通信協(xié)議。 2) 電子郵件的基本原理,是在通信網(wǎng)上設立“電
7、子信箱系統(tǒng)” ,它實際上是一個計 算機系統(tǒng)。系統(tǒng)的硬件是一個高性能、大容量的計算機。硬盤作為信箱的存儲介質(zhì),在 硬盤上為用戶分一定的存儲空間作為用戶的“信箱” ,每位用戶都有屬于自己的個電 子信箱。并確定個用戶名和用戶可以自己隨意修改的口令。存儲空間包含存放所收 ASP.NET 郵件收發(fā)系統(tǒng) 信件、編輯信件以及信件存盤三部分空間,用戶使用口令開啟自己的信箱,并進行發(fā)信、 讀信、編輯、轉發(fā)、存檔等各種操作。系統(tǒng)功能主要由軟件實現(xiàn)。 3) 電子郵件的通信是在信箱之間進行的。用戶首先開啟自己的信箱,然后通過鍵 入命令的方式將需要發(fā)送的郵件發(fā)到對方的信箱中。郵件在信箱之間進行傳遞和交換, 也可以與另個
8、郵件系統(tǒng)進行傳遞和交換。收方在取信時,使用特定賬號從信箱提取。 1.2 開發(fā)背景 當前流行的各大郵件客戶端軟件的除了最主要的收發(fā)信件之外,功能越來越復雜, 但是人們平常真正用到的功能很少,很多功能尤其對于那些計算機知識相對缺乏的人來 說,更加顯得太過于華麗而不太實用。有鑒于此,在了解 RFC 底層協(xié)議的基礎上,我 們開發(fā)了這個各種功能相對簡單實用的郵件客戶端程序,簡化了很多不必要的功能。 1.3 課題研究方法 郵件收發(fā)是多個客戶之間交流的工具,起到通信功能 。我的畢業(yè)設計所做的虛擬 機采用標準 語言編寫,在結構上模仿了 126 郵箱與新浪郵箱的設計。 1.4 開發(fā)環(huán)境及運行環(huán)境 1.4.1 開
9、發(fā)環(huán)境 AMD Athlon(TM),512M 內(nèi)存,80G 硬盤 Microsoft Windows XP Professional Microsoft Visual Studio 2008(C Sharp) Microsoft Developer Network for Visual Studio.NET 2008 Microsoft SQL Server 2005 1.4.2 運行環(huán)境 Intel Pentium 2 及以上處理器,32M 以上內(nèi)存,4G 以上硬盤 長沙航空職業(yè)技術學院畢業(yè)設計 Microsoft Windows 9X/NT 操作系統(tǒng) 800*600 或以上的屏幕分辨率
10、確保機器上安裝有.Net Framework 1.0 或者以上版本 (以后略) 2 郵件收發(fā)系統(tǒng)設計 2.1 軟件架構及系統(tǒng)用例圖 2.1.1 系統(tǒng)架構 軟件的總體架構如圖 2.1: 圖 2.1 軟件架構圖 主界面 主要功能選 擇 用戶 發(fā)送郵件 類 接收郵件 類 ASP.NET 郵件收發(fā)系統(tǒng) 2.1.2 系統(tǒng)總體用例 存入草稿 刪除郵件 接收郵件 登錄賬號 注冊賬號 發(fā)送郵件 純文本郵件 帶附件郵件 圖 2.2 系統(tǒng)總體用例圖 2.1.3 程序功能框圖 長沙航空職業(yè)技術學院畢業(yè)設計 客戶端軟件 郵件接收系統(tǒng) 郵件接收系統(tǒng) 刪除郵件 簡單郵件接收 帶有附件的郵件接收 簡單郵件發(fā)送 帶有附件的郵
11、件發(fā)送 聯(lián)系人管理 徹底刪除 存入草稿箱 添加聯(lián)系人 刪除聯(lián)系人 修改聯(lián)系人 圖 2.3 程序功能圖 3 電子郵件的標準格式 (RFC 822) 3.1 RFC 822 簡介 RFC822 規(guī)定的電子郵件內(nèi)容全部由 ASCII 字符組成,就是通常所說的文本文件, 因而標準將它稱為 Internet 文本信件(Internet Text Messages)。 從直觀上看,信件非常簡單,就是一系列由 ASCII 字符組成的文本行,每一行以 回車換行符(“CRLF“,就是 ASCII 碼的 13 和 10)結束。 從組織上看,信件內(nèi)容結構分為兩大部分,中間用一個空白行(只有 CRLF 符的行) 來分
12、隔。第一部分稱為信件的頭部(the header of the message),包括有關發(fā)送方、 接收方、發(fā)送日期等信息。第二部分稱為信件的體部(Body of the message),包括信 件內(nèi)容的正文文本。信頭是必需的,信體是可選的,即信體可有可無。如果不存在信 ASP.NET 郵件收發(fā)系統(tǒng) 體,用作分隔的空白行也就不需要。在信體中,也可以有用作分隔的空白行。這樣設 計的信件便于進行語法分析,提取信件的基本信息。 在 RFC822 中規(guī)定,信件體就是一系列的向收信人表達信息的文本行,比較簡單,可以 包含任意文本,并沒有附加的結構。信件頭則具有比較復雜的結構。 3.2 信件的頭部 3.
13、2.1 信頭的一般格式 信頭的結構比較復雜,信頭由若干信頭字段(header field)組成,這些字段為用 戶和程序提供了關于信件的信息。要了解信頭的結構就要弄清楚各種信頭字段。 所有的信頭字段都具有相同的語法結構,從邏輯上說,包括四部分,字段名 (field name),緊跟冒號“:“ (colon),后跟字段體(field body),最后以回車換行符 (CRLF)終止。即 信頭字段 = 字段名:字段體 CRLF 字段名必須由除了冒號和空格以外的可打印 USASCII 字符(其值在 33 和 126 之 間)組成,大多數(shù)字段的字段名稱由一系列字母,數(shù)字組成,中間經(jīng)常插入橫線符。字 段名告
14、訴電子郵件軟件如何翻譯該行中剩下的內(nèi)容。 字段體可以包括除了 CR 和 LF 之外的任何 ASCII 字符。但是其中的空格,加括號的注 釋,引號和多行字段都比較復雜,另外,字段體的語法和語義依賴于字段名,每個類 型的字段有特定的格式。RFC822 為信件定義了一些標準字段,并提供了用戶自行定義 非標準字段的方 3.2.2 結構化字段和非結構化字段 每個字段所包含的信息不同,字段大體可以分為結構化字段和非結構化字段。 結構化字段有特定的格式,由語法分析程序檢測。Sender 字段就是一個很好的例 子,它的字段內(nèi)容是信箱, 有一個離散的結構。 非結構化的字段含有任意的數(shù)據(jù),沒有固定格式。例如,Su
15、bject 字段可以含有任 意的文字,并且沒有固定格式。非結構化的字段數(shù)量較少,只有 Subject、 Comments、擴展字段,非標準字段、INReply 和 References 等。所有其它字段都是 結構化的。 3.2.3 信頭字段的元素 盡管 Email 信件的總體結構非常簡單,但一些信頭字段的結構是很復雜的。下面 介紹一些大多數(shù)字段共有的元素。 (1)空白符 長沙航空職業(yè)技術學院畢業(yè)設計 像其它文本文件一樣,空白符包括空格符(ASCII 碼 32)和制表符 Tab(ASCII 碼 19)。 此外,行末的回車換行符 CRLF 也應算是空白符。使用空白符可以對字段進行格式化, 增加它的
16、可讀性。例如,每個字段間用 CRLF 來分離,在字段內(nèi)用空格來分隔字段名和 字段內(nèi)容。在 Subject 后面的冒號和內(nèi)容之間插入空格字符,會使字段結構更加清晰。 在 Email 中,空白符的使用并沒有固定的規(guī)則,但應當正確地使用,僅在需要時才使 用空白符,以便接收軟件進行語法分析。 (2)注解 注解是由括號括起來的一系列字符,例如,(這份禮物)。注解一般用在非結構化 的信頭字段中,沒有語法語義,僅為人提供了一些附加的信息。如果在加引號的字符 串中有包括在括號中的字符,那是字符串的一部分,不是注解。在解釋信件的時候, 會將注解忽略,可以用一個空格字符代替它們,這樣就什么也不會破壞。 (3)字段
17、折疊 每個信頭字段從邏輯上說應當是一個由字段名、冒號、字段體和 CRLF 組成的單一 的行,但為了書寫與顯示的方便,增加可讀性,也為了符合 1000/80 的行字符數(shù)的限 制,可以將超過 80 個字符的信頭字段分為多行,即對于比較長的字段,可以分割成幾 行,形成折疊。在結構化和非結構化字段中都允許折疊。通過在字段中某些點插入 CRLF 符和至少一個或多個空白字符來實現(xiàn)字段的折疊,第一行后面的行稱為信頭字段 的續(xù)行。續(xù)行都以一個空白符開始,這種方法稱為折疊(folding),例如標題字段 Subject: This is a test 可以表示為:Subject: This is a test
18、反之,將一個被折疊成多行的信頭字段恢復到它的單行表示的過程叫做去折疊, 只要簡單地移除后面跟著空格的 CRLF,將折疊空白符 CRLF 轉換成空格字符,就可以完 成去折疊(unfolding)。在分析被折疊的字段的語法時,要把一個多行的折疊字段展開 為一行,根據(jù)它的非折疊的形式來分析它的語法與語義。 (4)字段大小寫 字段名稱是不區(qū)分大小寫的,所以 Subject、subject 或 SUBJECT 都一樣。不過字 段名稱大小寫有習慣的常用形式,如主題字段的大小寫形式通常為 Subject。字段體的 大小寫稍微復雜點,要視情況而定。比如 Subject 后面的字段體,其中的大寫可能就 是縮寫的
19、專用名詞,不能改動。 3.2.4 標準的信頭字段 下面介紹 RFC822 中定義的常用的標準信頭字段。 表 3-1 RFC822 常用的標準信頭字段 與發(fā)信方有關的信頭字段 格式:From:mailbox 舉例: 寫信人字段。說明信件的原始創(chuàng)建者,給出他的 電子信箱地址。創(chuàng)建者對信件的原始內(nèi)容負責。 ASP.NET 郵件收發(fā)系統(tǒng) From: 格式:Sender:mailbox 舉例: From: Sender: 發(fā)送者字段。說明實際提交發(fā)送這個信件的人, 給出他的電子信箱地址。當發(fā)信人與寫信人不一 樣時使用。比如,秘書替經(jīng)理發(fā)信。發(fā)送者對發(fā) 送負責。 格式:Reply- TO:mailbox
20、舉例: From: From: 回復字段。指定應當把回信發(fā)到哪里。如果有此 字段,回信將會發(fā)給它指定的郵箱,而不會發(fā)給 From 字段指定的郵箱。比如,發(fā)送的是經(jīng)理的信, 但回信應交辦公室處理。 與收信方有關的信頭字段 格式:TO:mailbox list 舉例:TO: 收信人字段。指定主要收信人的郵箱地址,可 以是多個郵箱地址的列表,地址中間用逗號隔 開。 格式:Cc:mailbox list 舉例:Cc: 抄送字段。指定此信件要同時發(fā)給哪些人,也 稱為抄送。也可以使用郵箱地址列表,抄送給 多個人。 格式:Bcc:mailbox list密抄字段。指定此信件要同時秘密發(fā)給哪些人, 也稱為密件
21、抄送。也可以使用郵箱地址列表, 密抄給多個人。 其它的信頭字段 格式:Date:date-time 舉例:Date:Tue,04 Dec 2004 16:18:08 +800 日期字段:Date 字段含有電子郵件創(chuàng)建的日期 和時間。 格式:Subject:*text 舉例:Subject:Hello! Subject:Re:Hello! 信件主題字段。描述信件的主題。當回復信件 時,通常在主題前面增加“Re:”前綴,標記 為該信件為回復信件:當信件被轉發(fā)時,通常 在主題文字前面加上“Fw:”,“Fwd:”這樣 的前綴。 格式:Received:“from“ domain ;發(fā)送主機 “by“
22、domain ;接收主 機 “via“ atom ;物理路 接受字段。是投遞信件的特定郵件服務器所作 的記錄。處理郵件投遞的每個服務器必須給它 處理的每個信頭的前面加一個 Received 字段, 用以描述信件到達目的地所經(jīng)過的路徑以及相 關信息。當跟蹤各個電子郵件問題時,這個信 長沙航空職業(yè)技術學院畢業(yè)設計 徑 “id“ msg-id ;接收者 msg id 息很有幫助。 舉例:Received:from wang195.0.0.1 by li129.5.0.4 Tue dec 2003 12:18:02 +800 格式:Comments:*text注釋字段。用于把一個注解添加到信件中。 格
23、式:Resent-* 舉例:Resent-From Resent-Sender Resent-date Resent-Reply-To 重發(fā)字段。當需要把收到的信件重發(fā)給另一組收 信人的時候,可以保持整個原始信件不變,并簡 單地產(chǎn)生重發(fā)信件所要求的新信頭字段。為避免 與以前的字段相混。新添加的信頭字段都加上 Resent-前綴字符串,它們的語法與未加前綴的 同名字段相同。 格式:Message-ID:msg- id 信件標識字段。用于表示一個信件唯一標識,該 字段通常有 Smtp 服務器生成,這個值通常是唯 一的。形式根據(jù)使用的軟件而定。通常左邊是標 識符,右邊指定電腦名 表 3-1 中的關鍵
24、字表明了電子郵件借用了辦公室備忘錄中的概念和術語:電子郵 件的頭部能夠包含一行說明應當接收到該備忘錄的接收方。象傳統(tǒng)的辦公室備忘錄一 樣,電子郵件使用關鍵字 Cc 指明一個復寫副本(carbon copy).電子郵件軟件必須向 Cc:后 面的電子郵件地址表中的每個地址發(fā)送一份消息的副本。 傳統(tǒng)的辦公室過程要求備忘錄的發(fā)送方通知接收方副本是否傳給其它人。有時發(fā) 送方希望將備忘錄的一個副本給別人而不顯示出有一個副本被發(fā)送出去。一些電子郵 件系統(tǒng)提供這樣的選項,遵循傳統(tǒng)的辦公室術語,用盲復寫副本(blind carbon copy) 來表示。創(chuàng)建消息的用戶 在關鍵字 Bcc 后給出一個電子郵件地址表
25、,指定一個或多個盲復寫副本。雖然 Bcc 在發(fā)送方出現(xiàn),但當信息發(fā)送時,郵件系統(tǒng)將它從消息中除去。每個接收方必須檢查 頭部的 To 和 Cc 行以決定信息是直接發(fā)送還是作為盲副本發(fā)送的(有些郵件系統(tǒng)在正文 部分附加信息來告訴接收者它是一個盲副本)。其它接收者不知道有哪些用戶接收到盲 副本。 電子郵件使用與傳統(tǒng)的辦公室備忘錄相同的格式和術語:頭部包括與消息有關的 信息,正文包括消息文本。電子郵件頭部的行說明發(fā)送方、接收方、日期、主題、應 當收到副本的人的列表。 (1)擴展字段 ASP.NET 郵件收發(fā)系統(tǒng) 如果想在信頭中加入 RFC822 中沒有規(guī)定的字段,就需要創(chuàng)建非標準字段。方法非 常簡單,
26、只要在自定義的信頭字段名的前面使用 X-前綴。RFC822 將這種方法稱為擴展 字段。事實上已經(jīng)有許多擴展字段被廣泛應用,但沒有標準定義。例如: X-LOOP 字段 X-LOOP 字段用來防止郵件的循環(huán)傳送。過濾或郵件列表處理程序,可以給它處理 的每個信件增加一個 X-LOOP 字段,以后就可以根據(jù)這個字段中含有的特別值,判斷一 個信件是否被循環(huán)傳送。如果確認郵件發(fā)生了循環(huán),過濾或郵件列表處理程序就可以 用不同的方式處理該信件。 X-Mailer 字段 X-Mailer 字段用于指示什么樣的程序產(chǎn)生了這個信件,它是使用最廣泛的擴展字 段。產(chǎn)生郵件的軟件可以為所有發(fā)送的信件增加合適的 X-Mai
27、ler 字段,該字段不僅含 有軟件的名稱,還包含軟件的版本號。 (2) 普通關鍵字 下表 3-2 列出了一些在因特網(wǎng)電子郵件中可以找到的普通關鍵字,以及它們的含 義。 信頭字段目的 From郵件作者 Sender發(fā)信人 Reply-To回郵地址 To收信人地址 CC抄送:另一個收信人地址 BCC密送:收信人地址,但其 它收信人看不到這個收信人的 地址。 Subject主題 Comments備注 Keywords關鍵字,用來進一步搜索 郵件 In-Reply-To被當前郵件回復的郵件的 ID 長沙航空職業(yè)技術學院畢業(yè)設計 References幾乎同 In-Reply-To 一樣 Encrypte
28、d加密郵件的加密類型 Date發(fā)信日期 3.3 SMTP 協(xié)議簡介及工作原理 3.3.1 介紹 簡單郵件傳輸協(xié)議(SMTP)的目標是可靠高效地傳送郵件,它獨立于傳送子系統(tǒng) 而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。 SMTP 的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務提供了進程間通 信環(huán)境(IPCE),此環(huán)境可以包括一個網(wǎng)絡,幾個網(wǎng)絡或一個網(wǎng)絡的子網(wǎng)。理解到傳 送系統(tǒng)(或 IPCE)不是一對一的是很重要的。進程可能直接和其它進程通過已知的 IPCE 通信。郵件是一個應用程序或進程間通信。郵件可以通過連接在不同 IPCE 上的進 程跨網(wǎng)絡進行郵件傳送。更特別的是,郵件可以通過不同網(wǎng)
29、絡上的主機接力式傳送。 3.3.2 SMTP 模型 SMTP 設計基于以下通信模型:針對用戶的郵件請求,發(fā)送 SMTP 建立與接收 SMTP 之間建立一個雙向傳送通道。接收 SMTP 可以是最終接收者也可以是中間傳送者。SMTP 命令由發(fā)送 SMTP 發(fā)出,由接收 SMTP 接收,而應答則反方面?zhèn)魉汀?一旦傳送通道建立,SMTP 發(fā)送者發(fā)送 MAIL 命令指明郵件發(fā)送者。如果 SMTP 接收 者可以接收郵件則返回 OK 應答。SMTP 發(fā)送者再發(fā)出 RCPT 命令確認郵件是否接收到。 如果 SMTP 接收者接收,則返回 OK 應答;如果不能接收到,則發(fā)出拒絕接收應答(但 不中止整個郵件操作),
30、雙方將如此重復多次。當接收者收到全部郵件后會接收到特 別的序列,如果接收者成功處理了郵件,則返回 OK 應答。 SMTP 提供傳送郵件的機制,如果接收方與發(fā)送方連接在同一個傳送服務下時,郵 件可以直接由發(fā)送方主機傳送到接收方主機;或者,當兩者不在同一個傳送服務下時, 通過中繼 SMTP 服務器傳送。為了能夠對 SMTP 服務器提供中繼能力,它必須擁有最終 目的主機地址和郵箱名稱。 ASP.NET 郵件收發(fā)系統(tǒng) MAIL 命令參數(shù)是回復路徑,它指定郵件從何處來;而 RCPT 命令的參數(shù)是轉發(fā)路徑 的,它指定郵件向何處去。向前路徑是源路徑,而回復路徑是返回路徑(它用于發(fā)生 錯誤時返回郵件)。 當同
31、一個消息要發(fā)往不同的接收者時,SMTP 遇到了向不同接收者發(fā)送同一份數(shù)據(jù) 的復制品的問題,郵件命令和應答有一個比較奇怪的語法,應答也有一個數(shù)字代碼。 在下面,例子中可以看到哪些使用實際的命令和應答。完整的命令和應答在第四節(jié)。 命令與應答對大小寫不敏感,也就是說,命令和應答可以是大寫,小寫或兩者的 混合,但這一點對用戶郵件名稱卻不一定是對的,因為有的主機對用戶名大小寫是敏 感的。這樣 SMTP 實現(xiàn)中就將用戶郵箱名稱保留成初始時的樣子,主機名稱對大小寫不 敏感。 命令與應答由 ASCII 字母表組成,當傳送服務提供 8 位字節(jié)傳送通道,每 7 位字 符正確傳送,而最高位被填充為 0。當指定一般的
32、命令或應答格式后,參數(shù)會由一些類 似于語言的字符串表示出來,如“或“,這里尖括號表示這 是一種類似于語言的變量。 3.4 SMTP 協(xié)議的命令和應答 3.4.1 SMTP 協(xié)議的命令 SMTP 命令是發(fā)送于 SMTP 主機之間的 ASC信息,可能使用到的命令如下表所示。 SMTP 協(xié)議命令 命令描述命令描述 DATA 開始信息寫作 RSET 重置會話,當前傳輸 被取消 EXPN 驗證給定的郵 箱列表是否存 在,擴充郵箱 列表,也常被 禁用 SAML FROM 發(fā)送郵件到用戶終端 和郵箱 HELO 向服務器標識 用戶身份,返 SEND FROM 發(fā)送郵件到用戶終端 長沙航空職業(yè)技術學院畢業(yè)設計
33、回郵件服務器 身份 HELP 查詢服務器支 持什么命令, 返回命令中的 信息 SOML FROM 發(fā)送郵件到用戶終端 或郵箱 MAIL FROM 在主機上初始 化一個郵件會 話 TURN 接收端和發(fā)送端交換 角色 NOOP 無操作,服務 器應響應 OK VRFY 用于驗證指定的用戶/ 郵箱是否存在;由于 安全方面的原因,服 務器常禁止此命令 QUIT 終止郵件會話 RCPT TO 標識單個的郵件接收 人;常在 MAIL 命令后 面可有多個 rcpt to : 3.4.2 SMTP 的應答碼 對 SMTP 命令的響應是多樣的,它確定了在郵件傳輸過程中請求和處理的同步,也 保證了發(fā)送 SMTP 知
34、道接收 SMTP 的狀態(tài)。每個命令必須有且只有一個響應。 SMTP 響應由三位數(shù)字組成,其后跟一些文本。數(shù)字幫助決定下一個應該進入的狀 態(tài),而文本對人是有意義的。三位的響應已經(jīng)包括了足夠的信息,不用再閱讀文本, 文本可以直接拋棄或者傳遞給用戶。特別的是,文本是與接收和環(huán)境相關的,所以每 次接收到的文本可能不同。在附錄 E 中可以看到全部的響應碼。正規(guī)的情況下,響應 由下面序列構成:三位的數(shù)字,一行文本和一個,或者也可以是一個多 行響應。只有 EXPN 和 HELP 命令可以導致多行應答,然而,對所有命令,多行響應都 是允許的。 REPLY CODES BY FUNCTION GROUPS 50
35、0 格式錯誤,命令不可識別(此錯誤也包括命令 行過長) ASP.NET 郵件收發(fā)系統(tǒng) 501 參數(shù)格式錯誤 502 命令不可實現(xiàn) 503 錯誤的命令序列 504 命令參數(shù)不可實現(xiàn) 211 系統(tǒng)狀態(tài)或系統(tǒng)幫助響應 214 幫助信息 220 服務就緒 221 服務關閉傳輸信道 421 服務未就緒,關閉傳輸信道(當必須關閉時,此應答可以作為對任 何命令的響應) 250 要求的郵件操作完成 251 用戶非本地,將轉發(fā)向 450 要求的郵件操作未完成,郵箱不可用(例如,郵箱忙) 550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問) 451 放棄要求的操作;處理過程中出錯 551 用戶
36、非本地,請嘗試 452 系統(tǒng)存儲不足,要求的操作未執(zhí)行 552 過量的存儲分配,要求的操作未執(zhí)行 553 郵箱名不可用,要求的操作未執(zhí)行(例如郵箱格式錯誤) 354 開始郵件輸入,以.結束 554 操作失敗 長沙航空職業(yè)技術學院畢業(yè)設計 4 重要模塊設計 4.1 用戶登錄模塊 輸入用戶名和密碼、驗證碼進行身份驗證,進入郵件管理模塊。 4.2 用戶郵箱主頁 用戶郵箱主頁,郵箱的主要功能顯示 ASP.NET 郵件收發(fā)系統(tǒng) 4.3 收件箱 4.4 發(fā)件箱 4.5 刪除郵件 4.6 通訊錄 長沙航空職業(yè)技術學院畢業(yè)設計 4.7 草稿箱 4.8 新建聯(lián)系人 4.9 寫信 ASP.NET 郵件收發(fā)系統(tǒng) 4
37、.10 郵件轉發(fā) 5 主要功能介紹 5.1 用戶登錄模塊 用戶輸入用戶名、密碼、驗證碼,與數(shù)據(jù)庫信息進行比對,如果輸入正確將登錄到郵 件系統(tǒng),反之會彈出錯誤信息。 string sql = “select * from userInfo where UserName=“+UserName +“ and password=“+passWord +“; SqlDataReader reader =con .GetList (sql ); if (reader.Read() this.Session“userName“ = UserName; 長沙航空職業(yè)技術學院畢業(yè)設計 Response.Redi
38、rect(“Main/MainPage.aspx“); else string scriptText = “alert(用戶名或密碼錯誤!請聯(lián)系您所交流的 客服QQ或電話!);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), scriptText, true); 。 5.2 框架的搭建 5.2.1 主要架構: 對不起,您的瀏覽器不支持框架 5.2.2 友情鏈接圖片 Log 及鏈接: var curIndex=0; var timeIntervar=1000; var arr
39、=new Array (); ASP.NET 郵件收發(fā)系統(tǒng) var Ihref=new Array (); arr 0=“/Image/local.jpg“; arr 1=“/Image/sina.jpg“; arr 2=“/Image/126.JPG“; arr 3=“/Image/yahoo.jpg“; arr 4=“/Image/qqq.jpg“; Ihref0=“#“; Ihref 1=“http:/ Ihref 2=“http:/ Ihref 3=“http:/ Ihref 4=“https:/ setInterval (changeImg,timeIntervar ); funct
40、ion changeImg() var obj=document.getElementById (“image“); var imgHref=document .getElementById (“imageHref“); for(var i=0;i 0) string scriptText = “alert(刪除成功);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), scriptText, true); else string scriptText = “alert(刪除
41、失敗);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), scriptText, true); 5.6 通訊錄 5.6.1 綁定通訊錄: int totalCount = 0; int pageSize = 15; int pageCount = 0; totalCount = conn.count(“select count(1) from contract “); if (totalCount % pageSize = 0) ASP.NET 郵件收發(fā)系統(tǒng) pageCou
42、nt = totalCount / pageSize; else pageCount = totalCount / pageSize + 1; this.GvPage.PageCount = pageCount; this.GvPage.PageIndex = pageIndex; this.GvPage.RecordCount = totalCount; string sql = “select * from contract “; gvContract.DataSource = conn.GetGrid_Pages_not(sql); gvContract.DataBind(); 5.6.
43、2 刪除聯(lián)系人: string sql = “delete from contract where CID in (“ + str + “)“; int res = conn.ExeSql(sql); 5.7 草稿箱 5.7.1 草稿箱的數(shù)據(jù)綁定: int totalCount = 0; int pageSize = 15; int pageCount = 0; totalCount = conn.count(“select count(1) from sentLetter where isDraf=Ture“); if (totalCount % pageSize = 0) pageCoun
44、t = totalCount / pageSize; else pageCount = totalCount / pageSize + 1; 長沙航空職業(yè)技術學院畢業(yè)設計 this.GvPage.PageCount = pageCount; this.GvPage.PageIndex = pageIndex; this.GvPage.RecordCount = totalCount; ltCount.Text = totalCount.ToString(); string sql = “select * from sentLetter where isDraf=True“; gvDraf .
45、DataSource = conn.GetGrid_Pages_not(sql); gvDraf.DataBind(); 5.7.2 草稿箱數(shù)據(jù)的刪除: string sql = “delete from sentLetter where sentId in (“ + str + “)“; int res = conn.ExeSql(sql); 5.8 聯(lián)系人 添加聯(lián)系人: string str = “; StringBuilder insertSql = new StringBuilder(); insertSql.AppendFormat (“insert into contract va
46、lues(0,1,2,3,4,5,6)“,txtCName .Text .ToString (),this.rblSex .SelectedValue .ToString (),txtCAddr .Text .ToString (),txtCEmail .Text .ToString (),txtCQQ .Text .ToString (),txtCPhone .Text .ToString (),txtCRemark .Text .ToString (); int res = conn.ExeSql(insertSql.ToString(); if (res 0) str = “alert(
47、恭喜添加聯(lián)系人成功);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), str, true); Refresh(); else str = “alert(添加聯(lián)系人失敗);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), str, true); ASP.NET 郵件收發(fā)系統(tǒng) 5.9 郵件轉發(fā) 郵件的轉發(fā),根據(jù)參數(shù)的傳遞,有草稿箱 Response.Red
48、irect(“writter.aspx?ID=“ + ID+“、收件箱 Response.Redirect(“writter.aspx?ID=“ + ID + “ 、發(fā)件箱 Response.Redirect(“writter.aspx?ID=“ + ID + “、刪除箱 Response.Redirect(“writter.aspx?ID=“ + ID+“的郵件進行轉發(fā)。轉發(fā)時 進行判斷,獲取數(shù)據(jù): if (Request.QueryString“Opt“ != null) Opt = Request.QueryString“Opt“.ToString(); switch (Opt) cas
49、e “draf“: sentLetterBind(); break; case “getLetter“: getLetterBind(); break; case “sentLetter“: sentLetterBind(); break; case “deleteLetter“: getLetterBind(); break; default: Refresh(); break; sentLetterBind(): string drafSql = “select * from sentLetter where sentId=“+id ; getLetterBind(): string dr
50、afSql = “select * from getLetter where ID=“ + id; 綁定數(shù)據(jù): SqlDataReader dataReader = conn.GetList(drafSql); if (dataReader.Read() txtSubject.Text = dataReader“getTitle“.ToString(); d_content.Value = “-原始文件- “; d_content.Value += dataReader“getContent“.ToString(); 長沙航空職業(yè)技術學院畢業(yè)設計 6 數(shù)據(jù)庫設計 6.1 登錄系統(tǒng) CREATE
51、 TABLE dbo.userInfo( UserId int IDENTITY(1,1) NOT NULL, UserName varchar(50) COLLATE Chinese_PRC_CI_AS NULL, password varchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_userInfo PRIMARY KEY CLUSTERED ( UserId ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLO
52、W_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY 6.2 收件箱 CREATE TABLE dbo.getLetter( ID int IDENTITY(1,1) NOT NULL, getTitle varchar(50) COLLATE Chinese_PRC_CI_AS NULL, getContent text COLLATE Chinese_PRC_CI_AS NULL, getTime datetime NULL, getStatus bit NULL, getter varchar(50) COLLA
53、TE Chinese_PRC_CI_AS NULL, senter varchar(50) COLLATE Chinese_PRC_CI_AS NULL, getFile varchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_getLetter PRIMARY KEY CLUSTERED ( ID ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS
54、= ON) ON PRIMARY ) ON PRIMARY TEXTIMAGE_ON PRIMARY 6.3 發(fā)件箱 CREATE TABLE dbo.sentLetter( sentId int IDENTITY(1,1) NOT NULL, sentTitle varchar(50) COLLATE Chinese_PRC_CI_AS NULL, sentContent text COLLATE Chinese_PRC_CI_AS NULL, ASP.NET 郵件收發(fā)系統(tǒng) sentTime datetime NULL, sentStatus bit NULL, senter varchar
55、(50) COLLATE Chinese_PRC_CI_AS NULL, isDraf bit NULL CONSTRAINT DF_sentLetter_isDraf DEFAULT (0), getter varchar(50) COLLATE Chinese_PRC_CI_AS NULL, sentFile varchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_sentLetter PRIMARY KEY CLUSTERED ( sentId ASC )WITH (PAD_INDEX = OFF, STATISTICS_NOR
56、ECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY TEXTIMAGE_ON PRIMARY 6.4 聯(lián)系人 CREATE TABLE dbo.userInfo( UserId int IDENTITY(1,1) NOT NULL, UserName varchar(50) COLLATE Chinese_PRC_CI_AS NULL, password varchar(50) COLLATE Chinese_PRC_CI_AS NU
57、LL, CONSTRAINT PK_userInfo PRIMARY KEY CLUSTERED ( UserId ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY 7 結論 這次編寫的郵件收發(fā)管理系統(tǒng),主要是郵件的發(fā)送的功能。在熟悉了專門用于發(fā) 送接收郵件的 SMTP 協(xié)議和 POP3 協(xié)議以及 RFC 規(guī)定的郵件的格式的基礎上,從實際使 用情況做
58、起,一步步的與服務器進行交互操作,最終實現(xiàn)發(fā)送接收普通郵件以及附件 的功能??傊ㄟ^這次的編程,使我對網(wǎng)絡編程有了一個很好的認識和鍛煉,也使 我對.NET 這一語言的掌握程度又上了一個新臺階,雖然編出來的軟件不能和功能強大 的各種郵件收發(fā)管理系統(tǒng)相提并論,但是相信它簡單,易操作性,和很多強大的軟件 比起來,更多了幾分實用性。以后的日子,隨著我技術的提高和思想的成熟,我一定 會把它做的更好,更趨近于完美。 長沙航空職業(yè)技術學院畢業(yè)設計 8 參考文獻 1 尚俊杰ASP.NET 程序設計M北京:清華大學出版社,北京交通大學出版 社2004 2 劉振巖基于.NET 的 Web 程序設計M電子工業(yè)出版
59、社2006 3 Dino Esposito 著,施平安 譯ASP.NET 2.0 技術內(nèi)幕北京:清華大學出版 社2006 4Kouresh Ardestani 著,張哲峰 譯高效掌握 ADO.NETC#編程篇北京:清華 大學出版社2003 5余金山ASP.NET 2.0+SQL Server 2005 企業(yè)項目開發(fā)與實戰(zhàn)北京:電子工業(yè) 出版社2008 6Jim Arlow,IIa NeustadtUML 2 and the Unified Process:PracticalObject- Oriented Analysis and Design,Second Edition北京:人民郵電出版社
60、2006 7陳萱華如何利用 ASP.NET 技術訪問數(shù)據(jù)庫計算機與現(xiàn)代化2003 (2) 9 致謝 三年的大學生活在這個季節(jié)即將劃上一個句號,而于我的人生卻只是一個逗號,我 將面對又一次征程的開始。我的整個畢業(yè)設計從 3 月中旬正式開始,感謝我的導師, 謝謝你在我不知道解決難題的時候給予我的幫助,指導我完成畢業(yè)設計。感謝我的輔 導員,無論在學習還是生活上給我們的無微不至的關懷,讓我們感受到集體的溫暖。 感謝我的朋友們,一起努力奮斗的走過大學生活的朋友們,讓我們在這個陌生的地市 不寂寞,謝謝你們在我不懂的時候告訴我怎么做。感謝長沙航空職業(yè)技術學院,為我 們提供了良好的學習環(huán)境和生活環(huán)境,讓我們學會技術技巧和結識了五湖四海的朋友 們。感謝湖南博源科技有限公司的同事和領導們,讓我在貴公司實習,學習項目開發(fā) 的整個過程,讓我懂得我和企業(yè)的距離。 最后再一次感謝所有在畢業(yè)設計中曾經(jīng)幫助過我的良師益友和同學,以及在設計中 被我引用或參考的論著作者,謝謝你們。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案