System.Net.Mail命名空間是在.NET Framework中新增的,該命名空間提供了發(fā)送電子郵件的功能。System.Net.Mail命名空間包含用于將電子郵件發(fā)送到SMTP服務(wù)器的類,這些類需要結(jié)合Microsoft STMP Server一起使用。
概述 System.Net.Mail命名空間下有StmpClient類用于發(fā)送郵件,可以完全替代SmtpMail類。利用SmtpClient類的Send方法可以完成發(fā)送電子郵件的傳輸,也可以用SendAsync方法進(jìn)行異步發(fā)送,后者發(fā)送完成后產(chǎn)生一個SendCompleted事件來通知發(fā)送結(jié)束。Send方法可以接受MailMessage類的對象作為參數(shù)。通過MailMessage類可以設(shè)置郵件更多的內(nèi)容和格式,例如,為Attachment類設(shè)置添加附件的參數(shù)。 System.Net.Mail命名空間的類組成 SmtpClient類與SMTP結(jié)合在一起,通過MailMessage類、MailAddress類、Attachment類來豐富電子郵件的內(nèi)容和設(shè)置。下面展示了用戶通過System.Net.Mail命名空間下的類結(jié)合SMTP發(fā)送電子郵件的過程。
管理SMTP的類:SmtpClient類 SmtpClient類封裝了將電子郵件發(fā)送到SMTP服務(wù)器的方法和屬性。 SmtpCleint類用于讓應(yīng)用程序向Smtp服務(wù)器發(fā)送電子郵件,可以通過同步或者異步的方法發(fā)送電子郵件。通過結(jié)合MailMessage類使用,還可以設(shè)置郵件的格式、添加抄送人、添加附件等。 語法定義: SmtpClient類的語法定義如下: public class SmtpClient 下面的代碼演示如何創(chuàng)建一個SmtpClient的實(shí)例 SmtpClient client = new SmtpClient("smpt.Sina.com"); //直接通過構(gòu)造函數(shù)設(shè)置SMTP主機(jī)服務(wù)器 或: SmtpClient client = new SmtpClient(); Client.Host = "smtp.Sina.com"; // 通過Host屬性來設(shè)置SMTP主機(jī)服務(wù)器 方法詳解: SmtpClient類主要使用SMTP來同步或異步地發(fā)送電子郵件。其中最常用的方法及其說明如下: 發(fā)送電子郵件時,只要簡單地調(diào)用Send方法就可以了,其中Send方法有兩個重載: public void Send(MailMessage message) 其中,參數(shù)message是MailMessage類的一個實(shí)例。 public void Send(string from ,string recipients,string subject,string body) ,第二個有四個參數(shù),其代表意義如下: from : 包含郵件發(fā)件人的地址信息。 recipients :包含郵件收件人的地址信息。 subject :包含郵件的主題行。 body :包含郵件的正文。 下面的代碼演示了如何使用Send函數(shù)發(fā)送電子郵件: static void Main(string[] args) { SmtpClient client = new SmtpClient(); //此處省略了client屬性設(shè)置代碼 client.Send("FromMailBox@Sina.com", "ToMailBox@Sina.com","電子郵件示例","您好,收到了嗎?"); Console.WriteLine("郵件已經(jīng)成功發(fā)送到{0}","ToMailBox@Sina.com"); } 技巧:如果不想主線程等待傳輸電子郵件完成后再執(zhí)行,可以使用異步SendAsync方法。SendAsync操作完成時會引發(fā)SendCompleted事件。
管理電子郵件內(nèi)容的類:MailMessage類 MailMessage類的實(shí)例表示一個電子郵件的所有內(nèi)容,并用SmtpClient類來傳輸?shù)絊MTP服務(wù)器。若要指定電子郵件的發(fā)件人、收件人和內(nèi)容,可以是使用MailMessage類的相關(guān)屬性。 MailMessage類是.NET Framework中管理郵件的專用類,表示可以使用SmtpClient類發(fā)送的電子郵件。該類提供了豐富的屬性來創(chuàng)建電子郵件,例如可以用Attachments屬性添加附件。當(dāng)一個廣告設(shè)計(jì)師要以網(wǎng)頁的形式向客戶發(fā)送某產(chǎn)品的廣告,還需要抄送自己的上司時,則可以設(shè)置MailMessage類的IsBodyHtml屬性為true,并在CC屬性中添加其上司的電子郵箱地址來同時發(fā)送。 語法定義 該類的構(gòu)造函數(shù)有三個重載。下面的代碼演示如何創(chuàng)建一個MailMessage類的實(shí)例。 MailMessage message = new MailMessage(); //無參數(shù) //通過構(gòu)造函數(shù)設(shè)置SMTP主機(jī)服務(wù)器 MailMessage message = new MailMessage("smtp.sina.com"); //通過構(gòu)造函數(shù)設(shè)置SMTP主機(jī)服務(wù)器和端口 MailMessage message = new MailMessage("smtp.sina.com",25); 屬性詳解 MailMessage 類除了繼承父類的方法外,沒有提供其他方法。但其提供了豐富的屬性如下: 屬性: AlternateViews : 為了防止有些電子郵件閱讀程序無法顯示HTML內(nèi)容,該屬性存儲了郵件正文的替代形式的附件集合。 Attachments : 包含了此電子郵件的所有附件 Bcc : 包含此電子郵件密件抄送的收件人地址 Body: 郵件的正文 BodyEncoding : 郵件正文編碼 CC :包含了所有此電子郵件抄送的收件人地址 DeliveryNotificationOptions : DeliveryNotificaionOptions枚舉類型,確定此電子郵件的發(fā)送通知 From : 電子郵件發(fā)信人的地址 Headers : 電子郵件的標(biāo)頭 IsBodyHtml : Boolean值,設(shè)置郵件正文是文本還是Html格式,默認(rèn)為文本 Priority : 電子郵件的優(yōu)先級 ReplyTo : 電子郵件的回復(fù)地址,一般與發(fā)信人地址相同 Sender : 電子郵件發(fā)件人地址 Subject : 電子郵件的主題 SubjectEncoding : 電子郵件的主題內(nèi)容的編碼 To : 包含所有電子郵件的收件人的地址
例子: 使用MailMessage類設(shè)置電子郵件的內(nèi)容
在上面代碼中,用到了DeliveryNotificationOptions枚舉類型。該類型有5個成員值,具體代表意義如下: Delay : 通知傳送是否延遲 Never : 從不通知 None : 沒有通知 OnFailure : 通知傳送是否失敗 OnSuccess : 通知傳送是否成功
管理電子郵件地址類: MailAddress類 MailAddress 類表示電子郵件的地址。該類結(jié)合SmtpClient類或MailAddress類使用,其實(shí)例存儲了電子郵件的地址信息。MailAddress類是.NET Framwork新增的類,可以設(shè)置電子郵件發(fā)件人或收件人的地址。通過該類的屬性可以獲取電子郵件地址的聯(lián)系人的詳細(xì)信息。例如電子郵件中顯示聯(lián)系人的名字和SMPT服務(wù)器上的用戶名。 語法定義 該類的構(gòu)造函數(shù)有三個重載,下面的代碼演示了如何創(chuàng)建其實(shí)例: //指定電子郵件的地址構(gòu)造一個新實(shí)例 MailAddress fromMailBox = new MailAddress("FromMailBox@Sina.com"); //指定電子郵件的地址和顯示名稱構(gòu)造一個新實(shí)例 MailAddress fromMailBox = new MailAddress("FromMailBox@Sina.com","顯示名稱"); //指定電子郵件的地址、顯示名稱和顯示名稱的編碼構(gòu)造一個新實(shí)例 MailAddress fromMailBox = new MailAddress("FromMailBox@Sina.com","顯示名稱",System.Text.Encoding.Default); 屬性詳解 Address: 獲取電子郵件的地址 DisplayName : 獲取在電子郵件顯示的名稱 Host : 獲取服務(wù)器名稱,也就是在電子郵件地址@符號后的服務(wù)器名稱 User : 獲取用戶名稱,也就是在電子郵件地址@符號前的用戶名
輸出結(jié)果: 電子郵件地址是:FromMailBox@sina.com 顯示名:張三 服務(wù)器名:sina.com 用戶名:FromMailBox
表示電子郵件附件的類: Attachment類 Attachment類表示電子郵件的附件集合。該類結(jié)合了MailMessage類一起使用,可以為電子郵件添加附件。該類可以使用字符類型和數(shù)據(jù)流(Stream)的形式創(chuàng)建附件。支持?jǐn)?shù)據(jù)流的形式就意味著能用任何的文件格式作為附件,例如TXT格式或DOC格式。 語法定義 public class Attachment: AttachmentBase 該類的構(gòu)造函數(shù)有6個重載,下面演示創(chuàng)建一個Attachment類的實(shí)例的兩種常用方式。 Attachment item = new Attachment(@"c:\附件.txt",MediaTypeNames.Text.Plain); 以上這種情況,第一個參數(shù)為附件的路徑,第二個參數(shù)附件的MIME內(nèi)容標(biāo)頭信息,簡單來說就是表明文件的格式。 System.IO.FileInfo file = new System.IO.FileInfo(@"c:\附件.txt"); System.IO.FileStream stream = file.OpenRead(); Attachment item = new Attachment(stream,MediaTypeNames.Text.Plain); 第二種情況,第一個參數(shù)以數(shù)據(jù)流的方式傳入。數(shù)據(jù)流可以從文件中讀出,也可以從數(shù)據(jù)庫中讀出。第二個參數(shù)跟上一種情況相同。 方法詳解: 除了通過new關(guān)鍵字實(shí)例化一個Attachment類對象外,還可以用Attachment類提供的靜態(tài)方法CreateAttachmentFromString來創(chuàng)建該類的一個實(shí)例。下面的代碼演示了如何使用CreateAttachmentFromString方法。 Attachment item = Attachment.CreateAttachmentFromString(@"c:\附件.txt",MediaTypeNames.Text.Plain);
屬性詳解: Attachment類通過一些屬性來訪問附件的內(nèi)容,其中幾個重要的屬性及其說明如下: ContentDisposition : 附件的MIME內(nèi)容處置 ContentStream : 附件的數(shù)據(jù)流 ContentType : 附件內(nèi)容的類型 Name : 附件內(nèi)容的類型名稱 下面用例子說明Attachment類屬性的用法: static void Main(string[] args) { Attachment content = new Attachment(@"c:\附件.txt",MediaTypeNames.Text.Plain); ContentDisposition dispositioin = content.ContentDispositioin; disposition.FileName= “文本附件”; Console.WriteLine("附件內(nèi)容名稱:{0} 類型名稱:{1} 附件文件:{2}",content.Name,content.ContentType.MediaType,content.ContentDisposition.FileName); } 上面的代碼輸出結(jié)果為: 附件內(nèi)容名稱:附件.txt 類型名稱:text/plain 附件文件:文本附件 典型應(yīng)用:使用Attahment類添加電子郵件的附件 下面演示如何使用Attachment類為電子郵件添加一個文本附件,代碼如下:
|
|
來自: 趨明 > 《編程開發(fā)》