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