陳文蘭
(南京市莫愁中等專業(yè)學(xué)校 電子信息系, 南京 210017)
.NET的核心是.NET Framework(微軟.NET 框架體系)。.NET Framework有2個重要的組件,一是最基本的通用語言運行時庫CLR(Common Language Runtime),是運行時的環(huán)境,提供程序編譯、內(nèi)存管理、安全性管理等功能,是執(zhí)行管理代碼的代理;二是具有多種處理功能的類庫。.NET Framework類庫是一個綜合性的面向?qū)ο蟮目芍赜玫念愋图希ǖ念愋陀蓄?、接口、委托、結(jié)構(gòu)和枚舉等??梢杂妙悗靵黹_發(fā)多種應(yīng)用程序,這些應(yīng)用程序包括字符用戶界面(命令行)或圖形界面(GUI)應(yīng)用程序,也包括基于ASP.NET的應(yīng)用程序。
.NET Framework類庫是以多層嵌套的“命名空間”方式來組織“類”,或者說這些“類”分布在不同的“命名空間”中。命名空間是用來組織和重用代碼的編譯單元,也稱“名稱空間”或“名字空間”。因此,要使用命名空間所包含的類,通常使用using關(guān)鍵字來導(dǎo)入該命名空間。.NET類庫位于命名空間“System”下,System命名空間包含了上百個類、接口、結(jié)構(gòu),涉及了多種重要的基本處理功能。System命名空間中還包含許多二級命名空間,如System. Net命名空間為網(wǎng)絡(luò)使用的多種協(xié)議提供了編程接口。而System.Net.Sockets命名空間則為網(wǎng)絡(luò)訪問提供Windows Sockets接口的托管實現(xiàn)。作為程序開發(fā)者可以定義自己的類,從而擴展類庫中的類。當(dāng)然也可以定義專用的命名空間,這樣可以避免自定義的“類”和其它“類”發(fā)生沖突。
電子郵件系統(tǒng)按客戶/服務(wù)器(Client/Server,簡稱C/S)模式工作。發(fā)件人通過電子郵件客戶端中的郵件發(fā)送程序按照SMTP協(xié)議先與發(fā)件人郵箱所在的郵件服務(wù)器建立連接,再與收件人郵件服務(wù)器進行連接。如果收件人的郵箱存在,就將郵件傳送給收件人郵件服務(wù)器,并由收件人郵件服務(wù)器將郵件放入收件人的郵箱。否則,發(fā)件人信箱服務(wù)器就會退回信件,同時通知發(fā)件人。
收件人任何時候在任何已經(jīng)連接到互聯(lián)網(wǎng)的終端(如計算機)上都可以檢查并接收郵件。接收郵件時,收件人終端上運行的電子郵件客戶端的郵箱訪問程序會按照POP3協(xié)議或者IMAP4協(xié)議向收件人的郵件服務(wù)器提出收信請求,只要用戶輸入的身份信息(如用戶名和密碼)正確,就可以從自己的郵箱內(nèi)讀出郵件或下載郵件,工作過程如圖1所示。
圖1 電子郵件系統(tǒng)的工作過程
在電子郵件系統(tǒng)中,使用SMTP協(xié)議來發(fā)送電子郵件, 并控制信件中轉(zhuǎn)方式。SMTP(Simple Mail Transfer Protocol)是一組用于由源地址到目的地址傳送郵件的規(guī)則。 郵件服務(wù)器執(zhí)行SMTP協(xié)議,檢查是否有郵件需要發(fā)送和接收,并負責(zé)把要發(fā)送的電子郵件發(fā)送出去,把要接收的郵件放到收件人郵箱。SMTP協(xié)議是本文實現(xiàn)電子郵件發(fā)送系統(tǒng)的重要協(xié)議。
(1)System.Net.Mail命名空間。System.Net.Mail命名空間提供了發(fā)送電子郵件的基本功能,此命名空間中包含用于將電子郵件發(fā)送到SMTP服務(wù)器所需的類或枚舉,成員有MailMessage、MailAddress、SmtpClient、Atachment、MailPriority、SmtpStatusCode等。
(2)MailMessage類。要成功發(fā)送一個郵件需涉及MailMessage類,該類用來定義郵件,包括內(nèi)容、主題、收件人、發(fā)件人等信息。MailMessage類的主要屬性有Attachment表示電子郵件的附件;MailAddress表示電子郵件發(fā)件人或收件人的地址;MailMessage表示可以使用SmtpClient類發(fā)送的電子郵件;SmtpClient允許應(yīng)用程序使用簡單郵件傳輸協(xié)議SMTP來發(fā)送電子郵件;MailPriority指定MailMessage的優(yōu)先級。
(3)MailAddress類。用來定義收件人、發(fā)件人的地址。
(4)SmtpClient類。用來發(fā)送由MailMessage類定義好的郵件。SmtpClient類的主要屬性有SmtpClient,初始化SmtpClient類的新實例;Credentials驗證發(fā)件人的身份;Host獲取或設(shè)置SMTP服務(wù)器名稱或IP地址;Port獲取或設(shè)置SMTP服務(wù)器端口。Send方法用于將電子郵件發(fā)送到SMTP服務(wù)器。
(5)Atachment類。若發(fā)送郵件時,需要發(fā)送附件,就用到Atachment類。此類用來定義郵件的附件,要和MailMessage配合使用。主要屬性ContentDisposition用來獲取附件內(nèi)容的MIME描述;ContentType獲取郵件附件內(nèi)容的類型;TransferEncoding獲取或指定郵件的編碼類型。
以163的SMTP服務(wù)器為例,發(fā)送一個具有附件功能的電子郵件,關(guān)鍵代碼運用如下:
//定義一個名為mm的MailMessage對象,對象sclient可以看作為一個郵件
MailMessage mm = new MailMessage();
//定義一個名為sclient的SmtpClient對象,對象mm可以看作為一個郵件服務(wù)器,這里使用了163郵件服務(wù)器
SmtpClient sclient = new SmtpClient("smtp.163.com");
//定義一個名為aFile的附件,附件所在路徑為d: est.txt
Attachment aFile = new Attachment("d:\test.txt");
//定義發(fā)件人的地址
mm.From = new MailAddress("********@163.com");
//定義收件人的地址
mm.To.Add(new MailAddress("****@126.com");
//定義抄送人的地址
mm.CC.Add("****@qq.com");
//定義郵件的主題為“Hello”
mm.Subject ="Hello";
//定義郵件的內(nèi)容關(guān)于中秋問候
mm.Body ="中秋節(jié)快樂!";
//添加一個附件
mm.Attachments.Add(aFile);
//提供一種驗證方式
sclient.Credentials=CredentialCache.DefaultNetwork Credentials;
//通過一個名字為sclient的郵件服務(wù)器將郵件mm發(fā)出
sclient.Send(mm);
本文主要研究基于.NET Framework類庫的簡單電子郵件發(fā)送功能實現(xiàn)。在Visual Studio .NET 2010環(huán)境下,以面向?qū)ο笄翌愋桶踩某绦蛟O(shè)計語言C#作為編程語言,設(shè)計了簡潔易操作的發(fā)送電子郵件功能界面,并詳細說明了關(guān)鍵代碼的運用。在程序調(diào)試過程中,出現(xiàn)了錯誤“不允許使用郵箱名稱。服務(wù)器響應(yīng)為: authentication is required.”,可以通過改變驗證方式,將提供的驗證指定為用戶名和密碼方式,即可排除此錯誤。最終測試,本文設(shè)計的電子郵件系統(tǒng)能夠正常地發(fā)送郵件,且操作方便。