電子郵件發(fā)送程序的設(shè)計與實(shí)現(xiàn)_第1頁
電子郵件發(fā)送程序的設(shè)計與實(shí)現(xiàn)_第2頁
電子郵件發(fā)送程序的設(shè)計與實(shí)現(xiàn)_第3頁
電子郵件發(fā)送程序的設(shè)計與實(shí)現(xiàn)_第4頁
電子郵件發(fā)送程序的設(shè)計與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

6、的商業(yè)化開發(fā)語言。但在帶來強(qiáng)大控制能力和高度靈敏性的同時,其代價是相對較長的學(xué)習(xí)周期和較低下的開發(fā)效率,同時對控制能力的濫用也給程序的安全性帶來了潛在的威脅。C+語言過度的功能擴(kuò)張也破壞了面向?qū)ο蟮脑O(shè)計理念。因此,軟件行業(yè)迫切需要一種全新的現(xiàn)代程序設(shè)計語言,他能夠在控制能力與生產(chǎn)效率之間達(dá)到良好的平衡,特別是將高端應(yīng)用開發(fā)與底層平臺訪問緊密結(jié)合在一起,并與Web標(biāo)準(zhǔn)保持同步,C#(讀作C-Sharp)語言就是這一使命的承擔(dān)著。C#語言是從C/C+語言發(fā)展而來的,他汲取了包括C+、Java、Delphi在內(nèi)的多種語言精華,是一種簡單易學(xué)、類型安全和完全面向?qū)ο蟮母呒壋绦蛟O(shè)計語言。它的設(shè)計目標(biāo)就是

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

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

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

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

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

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

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

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

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

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

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

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

19、合即可。在本次課程設(shè)計中,通過單擊添加附件和刪除附件按鈕實(shí)現(xiàn)附件的添加和刪除,添加附件成功后添加到message對象中,具體實(shí)現(xiàn)代碼如下:/添加附件按鈕 觸發(fā)函數(shù)private void button1_Click(object sender, EventArgs e) openFileDialog1.ShowDialog(); textBox_attach.Text = openFileDialog1.FileName; /刪除附件按鈕 觸發(fā)函數(shù)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)發(fā)送電子郵件及其附件,這是這個類中的核心函數(shù)在本次課程設(shè)計中,通過單擊單擊發(fā)送按鈕和復(fù)選按鈕來實(shí)現(xiàn)郵件的發(fā)送和發(fā)送次數(shù)的設(shè)置,通過退出按鈕進(jìn)行退出。郵件發(fā)送時,發(fā)送按鈕的文本將自動改為“正在發(fā)送”,此時,程序?qū)Πl(fā)件人和收件人地址進(jìn)行封裝、設(shè)置主題和內(nèi)容的編

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

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

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

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

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

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

27、送" if (checkBox1.Checked = true) /提示本次發(fā)送成功了 MessageBox.Show(textBox_time.Text+"次發(fā)送完畢","提示"); button_send.Text = "發(fā)送" /點(diǎn)擊復(fù)選按鈕的處理方法private void checkBox1_CheckedChanged(object sender, EventArgs e) /復(fù)選框?yàn)檫x中狀態(tài) if (checkBox1.Checked = true) /發(fā)送次數(shù)變?yōu)榭删庉嫚顟B(tài) textBox_time.Enab

28、led = true; /不是的話 設(shè)置發(fā)送次數(shù)框?yàn)?不可編輯狀態(tài) else textBox_time.Enabled = false; /退出按鈕private void button1_Click_1(object sender, EventArgs e) /應(yīng)用程序退出 Application.Exit(); 4)各種異常處理方法在本程序中,各種異常包括:文本框格式異常、附近路徑異常、smtp異常和未預(yù)料的其他類型異常。具體實(shí)現(xiàn)代碼如下:/捕獲格式錯誤異常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("請檢查網(wǎng)絡(luò)是否正常", "提示"); else continue; /捕獲未預(yù)料到的其他類型異常catch if(checkBox1.Checked=false) MessageBox.Show("發(fā)生不可預(yù)料的錯誤,請仔細(xì)檢查以上選項(xiàng)是不有錯!", "提示"); checkBox1.C

溫馨提示

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

評論

0/150

提交評論