電子郵件發送程序的設計與實現_第1頁
電子郵件發送程序的設計與實現_第2頁
電子郵件發送程序的設計與實現_第3頁
電子郵件發送程序的設計與實現_第4頁
電子郵件發送程序的設計與實現_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、目錄1 前沿11.1課題背景11.2課程設計目的21.3課程設計基本任務22 設計平臺簡介33、設計原理43.1 軟件總體架構43.2 程序功能框架圖43.3 SMTP協議研究與分析53.4 環境說明64.詳細設計74.1窗體界面控件設計74.2 程序實現85、系統的實現與測試155.1 發送電子郵件程序主界面(帶附件)155.2接收界面(帶附件)156、結束語17參考文獻18電子郵件發送程序的設計與實現摘 要 電子郵件(簡稱E-mai1)又稱電子信箱、電子郵政,它是種用電子手段提供信息交換的通信方式。電子郵件軟件的最基本功能就是實現郵件的發送與接收,本課程設計完成電子郵件的發送功能實現。本程

2、序是在了解RFC底層協議的SMTP協議和POP協議基礎上,以VS 2005為開發平臺,使用WebBrowser控件并使用C#編程語言從SMTP協議規定的底層命令做起一步步的與服務器進行交互操作,最終實現發送郵件功能,其發送功能包括:簡單郵件的發送、帶附件的郵件的發送、發送次數的設置。文中深入講解了SMTP的原理及電子郵件發送程序的設計與實現方法。關鍵詞 電子郵件;SMTP;VS;C#編程;郵件發送1 前沿1.1課題背景隨著Internet的迅猛發展,電了郵件(EMall)已成為凼特網上非常流行、非常方便的通信方式。電子郵件(簡稱E-mai1)又稱電子信箱、電子郵政,它是種用電子手段提供信息交換

3、的通信方式。它是全球多種網絡上使用最普遍的一項服務。這種非交互式的通信,加速了信息的交流及數據傳送,它是個簡易、快速的方法。通過連接全世界的Internet,實現各類信號的傳送、接收、存貯等處理,將郵件送到世界的各個角落。到目前為止,可以說電子郵件是Internet資源使用最多的一種服務,E-mai1不只局限于信件的傳遞,還可用來傳遞文件、聲音及圖形、圖像等不同類型的信息。電子郵件發送程序的發送方式有兩種:第一種是本地計算機與用戶所指定的發送郵件服務器連接,然后通過發送郵件服務器將郵件傳送到接收郵件的服務器,郵件中包含有信件主題和內容等一系列信息;第二種是本地計算機直接與接收電子郵件的服務器相

4、連接,并將郵件送入收信者的郵箱中,電子郵件接收程序則只需要處理本地計算機與存在電子郵件的服務器相連接,并通過帳號和口令從服務器中獲取電子郵件,郵件中包含有信件主題、內容和發送時間等。電子郵件不是一種“終端到終端”的服務,是被稱為“存貯轉發式”服務。這正是電子信箱系統的核心,利用存貯轉發可進行非實時通信,屬異步通信方式。即信件發送者可隨時隨地發送郵件,不要求接收者同時在場,即使對方現在不在,仍可將郵件立刻送到對方的信箱內,且存儲在對方的電子郵箱中。接收者可在他認為方便的時候讀取信件,不受時空限制。在這里,“發送”郵件意味著將郵件放到收件人的信箱中,而“接收”郵件則意味著從自己的信箱中讀取信件,信

5、箱實際上是由文件管理系統支持的個實體。 1.2課程設計目的本課程設計的目的主要是學習在VS平臺下圍繞著電子郵件發送的編程與開發,應用軟件工程的開發過程,詳細論述了SMTP的分析、設計及代碼實現,最終實現一個具有能發送簡單郵件,發送帶附件的郵件的郵件發送器。1.3課程設計基本任務(1)了解C#編程環境。(2)了解SMTP協議的通信原理。(3)功能模塊的實現。包括發送簡單郵件的實現、發送帶附件的郵件的實現、設置發送次數的實現及各種錯誤提示的實現。(4)系統的實現與測試。包括編譯后的C#程序和運行測試功能需求的實現。2 設計平臺簡介C#編程環境簡介:20世紀80年代以來,C/C+語言一直是使用最廣泛

6、的商業化開發語言。但在帶來強大控制能力和高度靈敏性的同時,其代價是相對較長的學習周期和較低下的開發效率,同時對控制能力的濫用也給程序的安全性帶來了潛在的威脅。C+語言過度的功能擴張也破壞了面向對象的設計理念。因此,軟件行業迫切需要一種全新的現代程序設計語言,他能夠在控制能力與生產效率之間達到良好的平衡,特別是將高端應用開發與底層平臺訪問緊密結合在一起,并與Web標準保持同步,C#(讀作C-Sharp)語言就是這一使命的承擔著。C#語言是從C/C+語言發展而來的,他汲取了包括C+、Java、Delphi在內的多種語言精華,是一種簡單易學、類型安全和完全面向對象的高級程序設計語言。它的設計目標就是

7、在繼承C/C+強大功能的用時,兼有RAD(快速應用程序開發)語言的高效性。作為.NET的核心編程語言,c#充分享受了CLR所提供的優勢,能夠與其他應用程序方便的集成和交互。下面是對它幾個突出特點的描述:語法簡潔:C#取消了指針、也不定義繁瑣的偽關鍵字;它使用有限地指令、修飾符合操作符,語法上幾乎不存在任何冗余,整個語言結構十分清晰。與Web緊密結合:借助Web服務框架,C#使得網絡開發和本地開發幾乎一樣簡單。開發人員無需了解網絡的細節,可以用統一的方式來處理本地的和遠程的C#對象,而C#組件能夠方便的轉為Web服務,并被其他平臺上的各種編程語言調用。目標軟件的安全性:C#符合通用類型系統的類型

8、安全性要求,并用CLR所提供的代碼訪問安全特性,從而能夠在程序中方便的配置安全等級和用戶權限。此外,垃圾收集機制自動管理對象的生命周期,這是的開發人員無需再負擔內存管理的任務,應用程序的可靠性進一步得到提高。靈活性與兼容性:C#中允許使用非托管代碼來與其他程序(包括COM組件、WIN32API等)進行集成和交互。它還可以通過委托(delegate)來模擬織針的功能,通過接口來模擬多繼承的實現。3 設計原理3.1 軟件總體架構軟件通過Form1、Program、Resources、Settings、class1類來實現電子郵件發送的各種功能,如發送簡單郵件、發送帶附近的郵件、設置發送次數、發送郵

9、箱的類型用戶通過主界面來選擇這些功能,軟件為用戶提供相應的服務。總體架構如圖3.1:發送郵件類主要功能選擇主界面用戶圖3.1 軟件總架構3.2 程序功能框架圖 電子以郵件發送軟件向用戶提供了各種功能,其中主功能為:簡單郵件的發送和帶有附件的郵件的發送,附加功能有:設置郵件自動發送的次數。另外,此程序中還有各種錯誤的提示,如發件人、收件人、主題格式不合法的提示,附件路徑是否正確的提示,網絡不正常的提示等等。如圖3.3所示:客戶端軟件各種錯誤的提示電子郵件發送系統附加功能 郵件的自動發送次數帶有附件的郵件發送簡單郵件發送圖3.2 程序功能框架3.3 SMTP協議研究與分析簡單郵件傳輸協議(SMTP

10、)的目標是可靠高效地傳送郵件,它獨立于傳送子系統而且僅要求一條可以保證傳送數據單元順序的通道。SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務提供了進程間通信環境(IPCE),此環境可以包括一個網絡,幾個網絡或一個網絡的子網。理解到傳送系統(或IPCE)不是一對一的是很重要的。進程可能直接和其它進程通過已知的IPCE通信。郵件是一個應用程序或進程間通信。郵件可以通過連接在不同IPCE上的進程跨網絡進行郵件傳送。更特別的是,郵件可以通過不同網絡上的主機接力式傳送。SMTP基于以下通信模型:針對用戶的郵件請求,發送SMTP建立與接收SMTP之間建立一個雙向傳送通道。接收SMTP可以是最

11、終接收者也可以是中間傳送者。SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方面傳送。一旦傳送通道建立,SMTP發送者發送MAIL命令指明郵件發送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCPT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方將如此重復多次。當接收者收到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答。SMTP提供傳送郵件的機制,如果接收方與發送方連接在同一個傳送服務下時,郵件可以直接由發送方主機傳送到接收方主機;或者,當兩者不在同一

12、個傳送服務下時,通過中繼SMTP服務器傳送。為了能夠對SMTP服務器提供中繼能力,它必須擁有最終目的主機地址和郵箱名稱。文件系統文件系統用戶接收SMTP發送SMTPSMTP命令郵件內容應答圖3.3 SMTP通信模型3.4 環境說明WindowsXP操作系統;Microsoft Visual Studio 20054 詳細設計4.1窗體界面控件設計本次窗口設計中,主要用到工具箱資源,工具箱中包含了可重用的控件。窗口是實現應用程序人機交互的重要組成部分,它不但可以實現數據流的輸入和輸出,而且也可以移動和關閉對話框。使用可視化的方法編程時,可在窗體中拖放控件,繪制出應用程序界面。尤其在設計對話框時,

13、使用工具箱中的可視化控件無疑使開發變得十分方便。要在應用程序中操作對話框資源,首先需要創建它。本實驗在vs 2005中對程序界面設計的對話框如圖4.1所示圖4.1 電子郵件發送程序界面其中,6個文本框的Name屬性從上到下依次為:From, To, Subject, Attach, Pass, Body。2個按鈕的Name屬性為Send,Exit。4.2 程序實現本課程設計中主要是用到了sendmail命名空間,此空間的包含的類為Form1、Program、Resources、Settings、class1,其中class1類用于檢測發件人、收件人和主題是否合法。這5個類中最核心的類為Form

14、1。下面將對Form1類分四部分進行說明:1)構造電子郵件 此部分主要有以下屬性和方法From 發件人的地址To以分號分隔的收件人的地址列表Subject電子郵件的主題Body 電子郵件的正文BodyFormat電子郵件的正文內容類型Attachments電子郵件附件集合在本次課程設計中,From文本框用于填寫發件人的地址、To文本框用于填寫收件人的地址、Subject文本框用于填寫信件主題、Attach文本框用于手動添加附件、Pass文本框用于填寫郵箱密碼、Body文本框用于寫入信件正文,雙擊各文本框時,文本框的內容自動清除后即可完成文本框內容的輸入,程序中初始

15、化一些信息。具體代碼如下所示:/雙擊發件人監聽方法private void textBox_from_DoubleClick(object sender, EventArgs e) /設置發送文本為空 textBox_from.Text = null; /雙擊收件人文本框的監聽方法private void textBox_to_DoubleClick(object sender, EventArgs e) /設置接收人文本為空 textBox_to.Text = null; /雙擊主題文本框的監聽方法private void textBox_subject_DoubleClick(object

16、 sender, EventArgs e) /設置主題文本框為空 textBox_subject.Text = null; /雙擊附件文本框 private void textBox_attach_DoubleClick(object sender, EventArgs e) /情況附件內容 textBox_attach.Text =null; /密碼框雙擊監聽方法 private void textBox_pass_DoubleClick(object sender, EventArgs e) /清空密碼框 textBox_pass.Text = null; /郵件體雙擊監聽方法 priva

17、te void textBox_body_DoubleClick(object sender, EventArgs e) /清空郵件體文本框 textBox_body.Text = null; /初始化一些信息 private void Form1_Load(object sender, EventArgs e) /發送次數 textBox_time.Text = "1" /發件人地址 textBox_from.Text = "xuna134700" /收件人地址 textBox_to.Text = "xuna134700" /郵件標

18、題 textBox_subject.Text = "我的郵件" /郵件主體內容 textBox_body.Text = "發送成功" /郵箱密碼 textBox_pass.Text = "271853927" /發送次數文本框默認為不可修改 textBox_time.Enabled = false; /自動發送復選按鈕默認為未選中狀態 checkBox1.Checked = false; 2)構造電子郵件附件Attachment用來構造電子郵件附件.用此類構造了電子郵件附件然后添加到MailMessage對象的Attachments集

19、合即可。在本次課程設計中,通過單擊添加附件和刪除附件按鈕實現附件的添加和刪除,添加附件成功后添加到message對象中,具體實現代碼如下:/添加附件按鈕 觸發函數private void button1_Click(object sender, EventArgs e) openFileDialog1.ShowDialog(); textBox_attach.Text = openFileDialog1.FileName; /刪除附件按鈕 觸發函數private void button2_Click(object sender, EventArgs e) textBox_attach.Text

20、 = "" /判斷是否有附件添加 有的話就添加到message對象中 if (textBox_attach.Text.Contains(":") /添加附件到message對象 message.Attachments.Add(newAttachment(textBox_attach.Text); 3)發送電子郵件及其附件,這是這個類中的核心函數在本次課程設計中,通過單擊單擊發送按鈕和復選按鈕來實現郵件的發送和發送次數的設置,通過退出按鈕進行退出。郵件發送時,發送按鈕的文本將自動改為“正在發送”,此時,程序將對發件人和收件人地址進行封裝、設置主題和內容的編

21、碼格式、并創建一個MailMessage對象用于傳遞郵件、最后構造smtp客戶端對象后便可實現郵件的發送。郵件發送成功后,會自動跳出“發送成功”的對話文本框。具體代碼如下所示:/發送郵件按鈕private void button3_Click(object sender, EventArgs e) /取得發送次數 int i = Convert.ToInt32(textBox_time.Text); /按發送次數 循環發送 for (int x = 1; x <= i; x+) button_send.Text = "發送" /線程睡1秒 Thread.Sleep(1

22、000); /如果自動發送的復選按鈕為選中狀態 則執行這里 if (checkBox1.Checked = true) /將發送信息寫入主題文本框 textBox_subject.Text = "test" + count.ToString(); /發送次數加1 count += 1; /將發送按鈕的文本改為“正在發送” button_send.Text = "正在發送" /將發送按鈕設置為不可點擊狀態 button_send.Enabled = false; try /封裝發件人地址 MailAddress from = new MailAddress

23、(textBox_from.Text.Trim(); /封裝收件人地址 MailAddress to = new MailAddress(textBox_to.Text.Trim(); /創建一個MailMessage對象 用于傳遞郵件 MailMessage message = new MailMessage(from, to); /設置主題 message.Subject = textBox_subject.Text; /設置郵件體信息 message.Body = textBox_body.Text; /將郵件體部分設置為html格式 message.IsBodyHtml = true;

24、 /判斷是否有附件添加 有的話就添加到message對象中 if (textBox_attach.Text.Contains(":") /添加附件到message對象 message.Attachments.Add(new Attachment(textBox_attach.Text); /設置主題部分的編碼為默認 message.SubjectEncoding = System.Text.Encoding.Default; /設置郵件體部分的編碼為默認 message.BodyEncoding = System.Text.Encoding.Default; /構造smtp

25、客戶端對象 SmtpClient client = new SmtpClient("smtp." + textBox_from.Text.Split('')1); /構造NetworkCredential對象用于封裝郵件 System.Net.NetworkCredential smtpuserinfo = new System.Net.NetworkCredential(); /寫入用戶名和密碼 smtpuserinfo.UserName = textBox_from.Text.Split('')0; smtpuserinfo.Passwo

26、rd = textBox_pass.Text; /將smtpuserinfo對象設置為smtp客戶端的Credentials client.Credentials = smtpuserinfo; /發送郵件。 client.Send(message); /到這里說明發送成功了if (checkBox1.Checked = false) MessageBox.Show("發送成功", "提示"); /恢復發送按鈕為可點擊狀態button_send.Enabled = true;/恢復發送按鈕文本為“發送”button_send.Text = "發

27、送" if (checkBox1.Checked = true) /提示本次發送成功了 MessageBox.Show(textBox_time.Text+"次發送完畢","提示"); button_send.Text = "發送" /點擊復選按鈕的處理方法private void checkBox1_CheckedChanged(object sender, EventArgs e) /復選框為選中狀態 if (checkBox1.Checked = true) /發送次數變為可編輯狀態 textBox_time.Enab

28、led = true; /不是的話 設置發送次數框為 不可編輯狀態 else textBox_time.Enabled = false; /退出按鈕private void button1_Click_1(object sender, EventArgs e) /應用程序退出 Application.Exit(); 4)各種異常處理方法在本程序中,各種異常包括:文本框格式異常、附近路徑異常、smtp異常和未預料的其他類型異常。具體實現代碼如下:/捕獲格式錯誤異常catch (FormatException) myclass.check(textBox_from.Text, textBox_to

29、.Text, textBox_subject.Text); return ; /捕獲異常catch (UnauthorizedAccessException) if (checkBox1.Checked = false) MessageBox.Show("請輸入正確的附件路徑"); return; /捕獲smtp異常catch (SmtpException) if(checkBox1.Checked = false) MessageBox.Show("請檢查網絡是否正常", "提示"); else continue; /捕獲未預料到的其他類型異常catch if(checkBox1.Checked=false) MessageBox.Show("發生不可預料的錯誤,請仔細檢查以上選項是不有錯!", "提示"); checkBox1.C

溫馨提示

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

評論

0/150

提交評論