天天看點

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

大家好,今天給大家介紹基于C#+asp.net+cs的電子郵件收發系統設計與實作,文章末尾附有本畢業設計的論文和源碼下載下傳位址哦。需要下載下傳開題報告PPT模闆及論文答辯PPT模闆等的小夥伴,可以進入我的部落格首頁檢視左側最下面欄目中的自助下載下傳方法哦

文章目錄:

  • 基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)
    • 1、項目簡介
    • 2、資源詳情
    • 3、關鍵詞:
    • 4、畢設簡介
    • 5、資源下載下傳

1、項目簡介

  1. 為了友善使用者快捷地收發郵件,本課題利用SMTP協定和POP3協定,經過前期對系統的需求分析和對相關協定的了解,設計并實作了簡單的電子郵件收發系統。為了保證本系統功能的完整性,在實作該系統過程中,設計了郵件使用者注冊子產品,當使用者首次使用本系統時,須注冊一個郵件賬号,然後才能進行其他的操作。作為一個電子郵件用戶端,郵件的發送與收取是其核心功能,本系統郵件發送塊實作電子郵件的發送,支援郵件的單個發送和群發,在郵件收取塊,實作了電子郵件的簡單收取。另外還增加了位址薄管理塊讓使用者更友善地管理自己的聯系人,對聯系人進行添加、修改、删除等。

2、資源詳情

項目難度:中等難度

适用場景:相關題目的畢業設計

配套論文字數:9688個字31頁

包含内容:整套源碼+完整畢業論文

3、關鍵詞:

電子郵件;SMTP;POP3;郵件收發系統

4、畢設簡介

提示:以下為畢業論文的簡略介紹,項目源碼及完整畢業論文下載下傳位址見文末。

1 引言

1.1 郵件用戶端相關介紹

電子郵件(Electronic Mail、E-mai1)又稱電子信箱,它是—種用電子手段提供資訊交換的通信方式,是應用于網絡上的使用最廣泛的網絡功能之一。到目前為止,可以說電子郵件是Internet資源使用最多的一種服務,E-mail不隻局限于信件的傳遞,還可用來傳遞檔案、聲音及圖形、圖像等不同類型的資訊。電子郵件不是“終端到終端”的服務,而是被稱為“存貯轉發式”的服務。“存貯轉發式”正是電子信箱系統的核心,利用存貯轉發可進行非實時通信,屬異步通信方式。電子郵件的發送幾乎是即時的并且可以一次發送給多個人,發送和接收主要通過SMTP協定和POP3協定來實作,經過幾十年的發展,電子郵件系統已經形成了完善的技術體系。

電子郵件系統是一種新型的資訊系統,是通信技術和計算機技術結合的産物。電子郵件系統采用“存儲轉發”的機制來完成電子郵件的收發。郵件伺服器處理發送和接收消息的事項,并在處理電子郵件的過程中與其他機器進行通信。

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖1工作流程圖

1.2 課題背景

省略

1.3 現狀分析

電子郵件來源于專有電子郵件系統,早在Internet流行以前,電子郵件就已經存在了,是在主機-多終端的主從式體系中從一台計算機終端向另一台計算機終端傳送文本資訊的相對簡單的方法下發展起來的。

省略

2 電子郵件相關協定

開發郵件用戶端程式,就不得不用到RFC822郵件格式、SMTP協定和POP3協定。RFC822定義了用于電子郵件封包的格式,即RFC822定義了POP3、SMTP以及其他電子郵件傳輸協定所送出、傳輸的内容;POP3是網際網路上傳輸郵件的第一個協定,也是一個離線協定;SMTP是Internet上傳輸電子郵件的标準協定,用于送出和傳送電子郵件,規定了主機之間傳輸電子郵件的标準交換格式和郵件在鍊路層上的傳輸機制。

2.1 RFC822郵件格式

RFC822中對電子郵件的格式加以定義,内容全部由ASCII字元組成,就是通常所說的文本檔案,因而标準将它稱為Internet文本信件(Internet Text Messages)。為了支援多媒體文檔的傳輸,1996年又發表了一系列的關于MIME(Multipurpose Internet mail Extensions)格式的定義。RFC822定義的郵件格式由兩部分組成:郵件頭(也稱信封)和郵件内容。郵件頭包括與傳輸、投遞郵件有關的資訊;郵件内容包括标題和正文。

2.2 SMTP協定

SMTP( Simple Mail Transfer Protocol)簡單郵件傳輸協定,是目前使用最廣泛的發送電子郵件的協定。SMTP通常用于把電子郵件從客戶機傳輸到伺服器,以及從某一伺服器傳輸到另一個伺服器。

2.2.1 SMTP協定簡介

簡單郵件傳輸協定(SMTP)的目标是可靠高效地傳送郵件,它獨立于傳送子系統而且僅要求一條可以保證傳送資料單元順序的通道。SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務提供了程序間通信環境(IPCE),該環境可以包括一個網絡,幾個網絡或一個網絡的子網。傳送系統(或IPCE)不是一對一的,程序可能直接和其它程序通過已知的IPCE通信。郵件是一個應用程式或程序間通信,郵件可以通過連接配接在不同IPCE上的程序跨網絡進行郵件傳送,更特别的是,郵件可以通過不同網絡上的主機進行接力式傳送。

SMTP設計基于以下通信模型:針對使用者的郵件請求,發送SMTP與接收SMTP之間建立一個雙向傳送通道。接收SMTP可以是最終接收者也可以是中間傳送者。SMTP指令由發送SMTP發出,由接收SMTP接收,而應答則反方向傳送。

一旦傳送通道建立,SMTP發送者發送MAIL指令指明郵件發送者。如果SMTP接收者可以接收郵件則傳回OK應答。SMTP發送者再發出RCPT指令确認郵件是否接收到。如果SMTP接收者接收,則傳回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方将如此重複多次。當接收者收到全部郵件後會接收到特别的序列,如果接收者成功處理了郵件,則傳回OK應答。

SMTP提供傳送郵件的機制,如果接收方與發送方連接配接在同一個傳送服務下時,郵件可以直接由發送方主機傳送到接收方主機;當兩者不在同一個傳送服務下時,通過中繼SMTP伺服器傳送,為了能夠對SMTP伺服器提供中繼能力,它必須擁有最終目的主機位址和郵箱名稱。

SMTP的工作過程有一下幾個過程有:(Mail)基本發送過程,向前傳送郵件,确認郵箱名稱和擴充郵件清單,發送到終端和打開關閉交換等。

2.2.2 SMTP的指令與應答

SMTP定義了14個指令,它們是:

HELO

MAIL FROM:

RCPT TO:

DATA

RSET

SEND FROM:

SOML FROM:

SAML FROM:

VRFY

EXPN

HELP [ ]

NOOP

QUIT

TURN

其中使得SMTP工作的基本的指令有7個,分别為:HELO,MAIL,RCPT,DATA,REST,NOOP和QUIT。下面分别介紹如下:

HELO–發件方向收件方問候,指令後面是發件人的伺服器位址或辨別。收件方回答OK時辨別自己的身份。問候和确認過程表明兩台機器可以進行通信,同時狀态參量被複位,緩沖區被清空。

MAIL–這個指令用來開始傳送郵件,它的後面跟随發件方郵件位址(傳回郵件位址)。它也用來當郵件無法送達時,發送失敗通知。為保證郵件的成功發送,發件方的位址應是被對方或中間轉發方同意接受的,這個指令會清空有關的緩沖區,為新的郵件做好準備。

RCPT --這個指令告訴收件方收件人的郵箱。當有多個收件人時,需要多次使用該指令,每次隻能指明一個人。如果接收方伺服器不同意轉發這個位址的郵件,它必須報550錯誤代碼通知發件方;如果伺服器同意轉發,它要更改郵件發送路徑,把最開始的目的地(該伺服器)換成下一個伺服器。

DATA–收件方把該指令之後的資料作為發送的資料。資料被加入資料緩沖區中,以單獨一行是"."的行結束資料。結束行對于接收方意味着立即開始緩沖區内的資料傳送,傳送結束後清空緩沖區;如果傳送接受,接收方回複OK。

REST–這個指令用來通知收件方複位,所有已存入緩沖區的收件人資料、發件人資料和待傳送的資料都必須清除,接收方必須回答OK。

NOOP–這個指令不影響任何參數,隻是要求接收方回答OK,不會影響緩沖區的資料。

QUIT–SMTP要求接收方必須回答OK,然後中斷傳輸。在收到這個指令并回答OK前,收件方不得中斷連接配接,即使傳輸出現錯誤。發件方在發出這個指令并收到OK答複前,也不得中斷連接配接。

對SMTP指令的響應是多樣的,它确定了在郵件傳輸過程中請求和處理的同步,也保證了發送SMTP知道接收SMTP的狀态。每個指令必須有且隻有一個響應。

SMTP響應由三位數字組成,其後跟一些文本。數字決定了下一個應該進入的狀态,而文本對人是有意義的。三位的響應已經包括了足夠的資訊,不用再閱讀文本,文本可以直接抛棄或者傳遞給使用者。特别的是,文本是與接收和環境相關的,是以每次接收到的文本可能不同。在附錄E中可以看到全部的響應碼。正規的情況下,響應由下面序列構成:三位的數字,一行文本和一個,或者也可以是一個多行響應。隻有EXPN和HELP指令可以導緻多行應答,然而對所有指令,多行響應都是允許的。

SMTP協定傳送郵件的應答:

500 格式錯誤,指令不可識别(此錯誤也包括指令行過長)

501 參數格式錯誤

502 指令不可實作

503 錯誤的指令序列

504 指令參數不可實作

211 系統狀态或系統幫助響應

214 幫助資訊

220 服務就緒

221 服務關閉傳輸信道

421 服務未就緒,關閉傳輸信道(當必須關閉時,此應答可以作為對任何指令的響應)

250 要求的郵件操作完成

251 使用者非本地,将轉發向

450 要求的郵件操作未完成,郵箱不可用(例如,郵箱忙)

550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可通路)

451 放棄要求的操作;處理過程中出錯

551 使用者非本地,請嘗試

452 系統存儲不足,要求的操作未執行

552 過量的存儲配置設定,要求的操作未執行

553 郵箱名不可用,要求的操作未執行(例如郵箱格式錯誤)

354 開始郵件輸入,以.結束

554 操作失敗

2.3 POP3協定

POP3(Post office Protrol,郵局協定,第3版)是Internet上傳輸電子郵件的第一個标準協定,也是一個離線協定。POP3為客戶機提供了發送信任狀(使用者名和密碼),這樣就可以規範對電子郵件的通路。POP3是絕大多數郵件收發程式使用的協定,使用者接收郵件時,一般都使用該協定。

2.3.1 POP3協定簡介

POP3協定适用于C/S結構的脫機模型的電子郵件協定。在POP3協定下,當客戶機與伺服器連接配接并查詢電子郵件時,被客戶機所指定的将被下載下傳的郵件都将被程式下載下傳到客戶機,下載下傳後客戶機可進行讀取,修改等操作,而無需與伺服器進一步互動。

POP3客戶向POP3伺服器發送指令并等待響應,POP3指令采用指令行形式,用ASCII碼表示。

伺服器響應是由一個單獨的指令行組成,或多個指令行組成,響應第一行以ASCII文本+OK或-ERR指出相應的操作狀态。

在POP3協定中有三種狀态,即認可狀态,處理狀态和更新狀态。

當客戶機與伺服器建立聯系時,一旦客戶機提供了自己身份并成功确認,即由認可狀态轉入處理狀态,在完成相應的操作後客戶機發出quit指令,則進入更新狀态,更新之後重返認可狀态。

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖2 POP3協定與三種狀态間的關系

2.3.2 POP3的指令和應答

一般情況下,大多數現有的POP3用戶端與伺服器執行采用ASCII明文發送使用者名和密碼,在認可狀态等待客戶連接配接的情況下,客戶發出連接配接,并由指令user/pass對在網絡上發送明文使用者名和密碼給伺服器 進行身份确認。一旦确認成功,便轉入處理狀态。為了避免發送明文密碼的問題,有一種新的認證方法,指令為APOP,使用APOP,密碼在傳輸之前被加密。

當第一次與伺服器連接配接時,POP3伺服器向客戶機發送一個ASCII碼問候,這個問候由一串字元組成對每個客戶機是唯一的,與當時的時間有關,然後客戶機把它的純文字密碼附加到從伺服器接收到的字元串之後,然後計算出結果字元串的MD5單出函數消息摘要,客戶機把使用者名與MD5消息摘要作為APOP指令的參數一起發送出去。

一開始便是用戶端與伺服器的連接配接,端口設為POP3協定預設的110。 用戶端連接配接伺服器成功後,伺服器會傳回以下資訊: +OK…… 字元+OK是POP3協定的傳回資訊。它的回應資訊不像SMTP協定那樣用豐富多變的數字表示,隻有兩個:+OK或者-ERR。其中,+OK表示連接配接成功,而-ERR則表示連接配接失敗。 接下來,用戶端輸入USER <使用者名> 該指令告訴伺服器你的使用者名。注意,有些伺服器會區分大小寫字母的。伺服器傳回+OK後,用戶端輸入PASS <密碼> 伺服器傳回+OK後,還傳回一些郵箱的統計資訊,比如:+OK 1 message(s) [1304 byte(s)] 不同的伺服器傳回的資訊格式不太一樣,是以我們可以用STAT指令來檢視郵箱的情況。STAT指令的回應中有兩個數字,分别表示郵件的數量和郵件的大小。如果信箱裡有信,就可以用RETR指令來擷取郵件的正文。RETR指令的格式為: RETR <郵件編号> 如果傳回結果第一行是+OK資訊,則表示成功。第二行起便是郵件的正文。最後一行和SMTP協定一樣,是一個單獨的英文句号,表示郵件的結尾部分。把郵件存儲起來後要用DELE指令删除郵箱中的郵件,否則原有的郵件會繼續保留在伺服器上,一旦郵件一多,你的郵箱就爆了。DELE指令的格式為: DELE <郵件編号> 如果删錯了,可以用RSET指令來恢複所有已被删除的郵件。條件是你還沒有退出,一旦退出,郵件便不能恢複了。全部完成以後,輸入QUIT指令就可以退出POP3伺服器了。

表1 pop3協定指令碼

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

3 系統需求分析

3.1 功能需求

作為一個電子郵件用戶端,其核心功能是能夠發送和接收郵件,其他附加功能如位址薄管理等也是不可少的。

3.1.1 郵件發送需求

主要要求能實作郵件的發送,不僅能實作單個發送而且還能實作群發,同時要求能夠發送附件。

3.1.2 郵件接收需求

要求能實作電子郵件的接收,不僅能實作郵件文本的接收而且還能實作附件的接收,同時具有提示發件人,接收日期。

3.1.3 附加功能需求

附件功能主要有位址薄管理,使用者能友善地實作對聯系人的管理。

3.2 研究思路

根據需求,本系統按照如下幾個子產品的設計的。

3.2.1 使用者注冊塊

使用者隻有在注冊郵件賬号後才能進行其他操作。

3.2.2 郵件發送塊

郵件發送塊主要實作郵件的發送,包括群發以及附件的發送。

3.2.3 郵件接收塊

主要實作郵件文本資訊的收取,包括附件的收取,同時具有其他如發件人等資訊提示功能。

3.2.4 位址薄管理塊

主要是友善使用者管理自己的聯系人,主要是對聯系人的增加,删除等。

4 系統總體功能子產品和系統總體流程

4.1 系統總體功能子產品

系統的功能子產品有賬号管理子產品、位址薄管理子產品、寫郵件子產品與收郵件子產品。

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖3 系統功能子產品圖

4.2 系統流程

當使用者打開用戶端時,需要注冊一個賬号進行郵件的收取等操作。

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖4 流程圖

5 系統功能實作

5.1 建立賬号子產品

5.1.1 子產品功能

使用者運作系統時,需要建立一個郵件賬号,在這個信件賬号的過程中,需要指定SMTP伺服器以及SMTP的端口。本子產品主要實作郵件賬号的注冊。

5.1.2 核心實作

  1. 網絡連接配接類及執行個體TcpClient

    為TCP網絡服務提供用戶端連接配接類TcpClient執行個體對象tc。TcpClient類提供了一些簡單的方法,用于在同步阻塞模式下通過網絡來連接配接、發送和接收流資料,而執行個體化的過程也是連接配接SMTP伺服器的過程。

    Privite TcpClient tc;

  2. 提供用于網絡通路的基礎資料流及其執行個體 NetworkStream

    此類提供通路網絡的基礎資料流的方法。其中最基本也是最重要的兩個方法就是Write()和Read()方法。

    private NetworkStream ns;

  3. 一維字元串數組變量FilePath

    此字元串數組主要用來存放使用者選擇的附件的絕對路徑。

    private string[] FilePath;

  4. 發送接收郵件所需的基本參數

    UserName; // 用于調用發送郵件類的使用者名

    PassWd; // 用于調用發送郵件類的密碼

    MailAddress;// 用于調用發送郵件類發送郵件人位址

    AccountName; // 建立的帳戶名

    SmtpName; // 用于調用發送郵件類的SMTP伺服器名

    SmtpPort=25;

    PopName; // 用于調用接收郵件的pop伺服器名

    PopPort=110;

5.1.3 運作界面

指定收發郵件的必須參數之後,再回到系統的主界面。

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖5 新使用者注冊

5.2 發送郵件子產品

5.2.1 子產品功能

在建立賬号的過程中已經指定了郵件位址和賬号名稱,是以預設将以這些參數來發送郵件,通過調用參數的不同程式會自動的調用相對應的代碼來執行不同的操作。本子產品主要實作郵件的發送,支援文本或html形式發送,同時也支援附件的發送。

5.2.2 核心實作

1 重載的構造函數 SmtpMail()

此函數主要用于在初始化過程中,把使用者選擇的附件的路徑以參數的形式傳給FilePath。

public SmtpMail(ArrayList array)
        {   //在重載構造函數的同時,将FilePath初始化
            FilePath = new string[array.Count];
            Attachments = new System.Collections.ArrayList();
            for (int i = 0; i < array.Count; i++)
            {
                FilePath[i] = array[i].ToString();
            }
            if (FilePath != null)
            {
                AddAttachment(FilePath);
            }
   }
           

2 添加附件的函數AddAttachment

傳給FilePath的路徑,通過這樣一個函數就可以循環的動态的添加到IList接口的一個對象中了,友善以後在具體的實作的過程中的使用。

public void AddAttachment(params string[] FilePath)
{    try
{
           if (FilePath == null)
            {
                throw (new ArgumentNullException("FilePath"));
             }
            for (int i = 0; i < FilePath.Length; i++)
             {
                 Attachments.Add(FilePath[i]);
              }
          }
          catch (Exception ex)
           {
               MessageBox.Show(ex.ToString());
           }
}
           

3 得到上傳的附件的檔案流GetStream

由于在網絡中的操作都是以網絡流的形式來實作的,是以先将上傳的附件轉換成檔案流,然後再用Write的方法把這些附件的檔案流寫入到網絡中,來完成發送附件的操作。具體實作代碼如下所示:

private string GetStream(string FilePath) 
{ 
//建立檔案流對象 
      System.IO.FileStream	FileStr=new System.IO.FileStream(FilePath,System.IO.FileMode.Open); 
      byte[] by=new byte[System.Convert.ToInt32(FileStr.Length)]; 
      FileStr.Read(by,0,by.Length); 
      FileStr.Close(); 
      return(System.Convert.ToBase64String(by)); 
}
           

4 發送SMTP指令的函數SendCommand

這個函數的作用是把SMTP指令的字元串轉換成對應的位元組型值(C#中規定的Write方法隻能寫入位元組型的資料)然後寫入網絡中,如果操作成功就傳回一個标志為真的布爾型變量,如果操作失敗或者發生異常就傳回标志為假的布爾型變量。具體代碼如下所示:

private bool SendCommand(string str) 
{ 
		//定義一個數組
		byte[] WriteBuffer; 
		//設定一個布爾類型的變量
		bool state=false; 
		WriteBuffer = Encoding.Default.GetBytes(str);
		//加入防錯機制,可以有效提高程式運作的效率和捕獲出錯資訊
		try
		{
			//向網絡中寫入資料
			ns.Write(WriteBuffer,0,WriteBuffer.Length); 
			state=true;
		}
		catch(Exception ex)
		{
			//傳回出錯資訊
			MessageBox.Show (ex.ToString ());
			state=false;
		}
		//傳回标志位
		return state;
}
           

5 郵件發送程式SendMail

具體的實作SMTP協定的程式正是通過它一步一步實作并最終實作發送簡單郵件甚至帶附件的郵件的功能。而它的實作是調用以上給出的各個函數的結果。以下就簡單的通過幾個SMTP指令的格式來實作。

private bool SendEmail() 
{ 
	//連接配接網絡 
	try 
	{
		//建立一個TCP連接配接
		tc=new TcpClient(mailserver, mailserverport); 
	}
	catch
	{
		MessageBox.Show ("連接配接失敗","請确認");
		return false; 
	}
	//擷取目前流的資料
	ns = tc.GetStream(); 
	SMTPCodeAdd(); 
	//驗證網絡連接配接是否正确 
	if(RightCodeHT[RecvResponse().Substring(0,3)]==null) 
	{
		return false; 
	}
	string[] SendBuffer; 
	string SendBufferstr; 
	//進行SMTP驗證 
	if(ESmtp) 
	{
		SendBuffer=new String[4]; 
		SendBuffer[0]="EHLO " + mailserver + enter; 
		SendBuffer[1]="AUTH LOGIN" + enter; 
       //核對使用者名和密碼
		SendBuffer[2]=Base64Encode(username) + enter; 
		SendBuffer[3]=Base64Encode(password) + enter; 
if(!Dialog(SendBuffer,"SMTP伺服器驗證失敗,請核對使用者名和密碼"))
		return false; 
	}
	else 
	{   SendBufferstr="HELO " + mailserver + enter; 
       if(!Dialog(SendBufferstr,"")) 
       return false; 
	}
   //核對發件人位址
	SendBufferstr="MAIL FROM:<" + From + ">" + enter; 
	if(!Dialog(SendBufferstr,"發件人位址錯誤,或不能為空")) 
	return false; 
	//把傳過來的收件人的位址分割然後送出給伺服器
	string split=";";
	string []address=Regex.Split (Recipient,split);
	SendBuffer=new string [address.Length];
	for(int i=0;i<SendBuffer.Length;i++)
	{
		SendBuffer[i]="RCPT TO:<" +address[i]+">" + enter;
	}
	if(!Dialog(SendBuffer,"收件人位址有誤")) 
	return false; 
    //發送相關的郵件正文
	SendBufferstr="DATA" + enter; 
	if(!Dialog(SendBufferstr,"")) 
	return false; 
    //提示發件人資訊
	SendBufferstr="From:" + FromName + "<" + From +">" +enter;
SendBufferstr += enter + "." + enter; 
	if(!Dialog(SendBufferstr,"錯誤信件資訊")) 
	return false; 
   //斷開連接配接
	SendBufferstr="QUIT" + enter; 
	if(!Dialog(SendBufferstr,"斷開連接配接時錯誤")) 
		return false; 
	ns.Close(); 
	    tc.Close();
	FilePath=null;
	return true; 
}
           

5.2.2 運作界面

發信時可選擇相關的郵箱賬号來進行郵件發送,也可選擇相關的收件人。

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖6 發送郵件

5.3 接收郵件子產品

5.3.1 子產品功能

可收取選中的郵件賬号郵件,也可收取新郵件賬号的郵件。當選中指定的郵件賬号收取郵件時,會提示相關的伺服器位址、使用者名和密碼。

5.3.2 核心實作

1 連接配接伺服器并傳回郵件總數

public int connect()
  {
       //連接配接POP3伺服器
        OpenPOP.POP3.Utility.Log = true;
        popClient.Disconnect();
        popClient.Connect(POPServer, int.Parse(port));
        popClient.Authenticate(login, password);
        //得到郵件總數
         count = popClient.GetMessageCount();
         msgs.Clear();
         return count;
}
           

2 接收郵件

public void receiveMail(int beginIndex, int endIndex)
 {      // 選取郵件數
          for (int i = beginIndex; i <= endIndex; i++)
          {
               receiveMail(i);
           }
  }
           

5.3.3 運作界面

當要收取新郵件賬号郵件時需重新輸入相應的伺服器位址、使用者名和密碼。收取郵件運作界面如圖7:

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖7 接收郵件

5.4 位址薄子產品

5.4.1 子產品功能

可以對位址薄管理,即可以添加、删除聯系人,也可以修改某個聯系人基本資訊。

5.4.2 核心實作

1 增加聯系人

private void button1_Click(object sender, EventArgs e)
        {
            string txt2;
            string txt3;
            txt2 = textBox2.Text;
            txt3 = textBox3.Text;
            // 判斷郵箱位址是否正确
            if (txt2.Contains("@") == false)
            {
                MessageBox.Show("郵箱位址錯誤!");
            }
            else
            {
                //讀取資料庫
               LName = this.textBox1.Text;
                MAddress = this.textBox2.Text;
                PhoneNo = this.textBox3.Text;
                Qq = this.textBox4.Text;
                Mobile = textBox5.Text;
                Address = this.textBox6.Text;
                //連接配接資料庫
Stringconn="provider=Microsoft.Jet.OLEDB.4.0;
DataSource="+Application.StartupPath+"\\Manage.mdb"; 
OleDbConnection myconn = new OleDbConnection(conn);
myconn.Open();
//向資料庫中插入聯系人資訊
string insert="insert into
lianxiren(Name,Mailbox,Phone,QQ,Mobile,Address) values('" + Add.LName + "','" + Add.MAddress + "','" + Add.PhoneNo + "','" + Add.Qq + "','" + Add.Mobile + "','" + Add.Address + "')";
OleDbCommand cmd = new OleDbCommand(insert, myconn);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    myconn.Close();
                }
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }
           

2 修改或删除聯系人

修改聯系人:

private void button1_Click(object sender, EventArgs e)
        {
            string txt2;
            string txt3;
            txt2 = textBox2.Text;
            txt3 = textBox3.Text;
            if (txt2.Contains("@") == false)
            {
                MessageBox.Show("郵箱位址錯誤!");
            }
            else
            {
                //調用選中賬号的相關資訊 
                Add.LName = this.textBox1.Text;
                Add.MAddress = this.textBox2.Text;
                Add.PhoneNo = this.textBox3.Text;
                Add.Qq = this.textBox4.Text;
                Add.Mobile = textBox5.Text;
                Add.Address = this.textBox6.Text;
                string conn = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\Manage.mdb";
                OleDbConnection myconn = new OleDbConnection(conn);
                myconn.Open();
                //修改聯系人屬性
                string sql = "update lianxiren set Mailbox
='" + Add.MAddress + "',Phone='" + Add.PhoneNo + "',QQ='" + Add.Qq + "',Mobile='" + Add.Mobile + "',Address='" + Add.Address + "' where Name = '" + Add.LName + "'";
                OleDbCommand cmd = new OleDbCommand(sql, myconn);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    myconn.Close();
                }
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }
           

删除聯系人:

private void button3_Click(object sender, EventArgs e)
        {   //調用選中的賬号的資訊
            Add.LName = this.textBox1.Text;
            Add.MAddress = this.textBox2.Text;
            Add.PhoneNo = this.textBox3.Text;
            Add.Qq = this.textBox4.Text;
            Add.Mobile = textBox5.Text;
            Add.Address = this.textBox6.Text;
            string conn = "provider=Microsoft.Jet.OLEDB.4.0;
DataSource="+Application.StartupPath + "\\Manage.mdb";
            OleDbConnection myconn = new OleDbConnection(conn);
            myconn.Open();
           //删除選中聯系人
            string sql = "delete from lianxiren where Name = '" + Add.LName + "'";
            OleDbCommand cmd = new OleDbCommand(sql, myconn);
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                myconn.Close();
            }
            this.DialogResult = DialogResult.OK;
            this.Close();
    }
           

5.4.3 運作界面

當對位址薄操作時,可增加聯系人,修改屬性和删除聯系人。如圖8:

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖8 位址薄管理

6 系統功能測試

6.1 發送郵件測試

本測試主要是對發送文本以及附件的測試

1 發送文本郵件給收信人

測試中用新浪的郵箱分别往新浪的郵箱以及163的郵箱發送文本郵件,均可以發送成功,同時具有群發功能,如圖9:

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖9 發送文本檔案

2. 發送附件給收件人

測試中用新浪的郵箱分别往新浪的郵箱以及163的郵箱發送附件,均可以發送成功。如圖10:

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖10 發送附件

6.2 接收郵件測試

本測試主要是對單個郵件收取測試,在選取相應的郵件賬号後,可以對單個郵件進行收取,也可以對新設定的郵件賬号進行郵件的收取,如圖11:

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖11 接收郵件

6.3 位址薄管理測試

本測試主要是對位址薄管理的測試,包括增加、删除、修改聯系人等。

1 增加聯系人

當點增加按鈕時,對聯系人的相關屬性進行添加。如圖 12:

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖12 增加聯系人

2. 删除聯系人

選中剛才增加的聯系人,對其進行删除,如圖13:

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖13 删除聯系人

3. 修改聯系人屬性

選中聯系人,對其屬性進行修改。

C#畢業設計——基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)——電子郵件收發系統基于C#+asp.net+cs的電子郵件收發系統設計與實作(畢業論文+程式源碼)

圖14 修改聯系人屬性

6.4 測試結果

經過對系統的測試,本系統能對郵件進行發送,能對郵件進行收取以及對位址薄進行管理。

結 論

省略

參考文獻

[1] Charles Petzold[美].楊濤,王建橋,楊曉雲,高文雅譯.C#程式設計[M].北京:機械工業出版社,2004。

[2] 郭文夷,戴芳勝. Visual C#.NET可視化程式設計[M]. 上海:華東理工大學出版社,2005。

[3] 秦斌,曾斌.C#應用程式開發标準教程[M].上海:上海科學普及出版社,2003。

[4] 仇谷烽,澎洪洪.Visual C#.NET網絡程式設計[M]. 北京:清華大學出版社,2004。

[5] 孫三才,張智凱,許熏尹.C#與.NET Framework實戰演練[M].北京:中國鐵道出版社,2002。

[6] 曹麒麟,張千裡.垃圾郵件與反垃圾郵件技術[M].北京:人民郵電出版社,2003。

[7] 孫維煜,劉傑,胡方霞,陳發吉.C#案例開發[M].北京:中國水利水電出版社,2005。

[8] 歐立奇,康祥順,馬煜.Visual C#案例開發集錦[M].北京:電子工業出版社,2005。

緻 謝

省略

5、資源下載下傳

本項目源碼及完整論文如下,有需要的朋友可以點選進行下載下傳。如果連結失效可點選下方卡片掃碼自助下載下傳。

序号 畢業設計全套資源(點選下載下傳)
本項目源碼 基于C#+asp.net+cs的電子郵件收發系統設計與實作(源碼+文檔)_.net_SMTP_POP3_電子郵件收發系統.zip