我的見解:
模塊化與組件化是編程的一種思想:提高代碼的重用性,提高開發效率。
常見的模塊化就是函數與各種類型的封裝,若是代碼具有更高的重用價值(能夠提供給別人使用),建議可以考慮封裝成動態鏈接庫(dll),直接引用使用。
常見的組件化就是將各種需求功能封裝成一系列完整的文檔(比模塊化要求更高、更完整),要用的時候直接引用對應的文件就可以使用。
說了那么多,我們就直奔今天的主題:在用ASP.NET 技術開發Web網站的時候,如何實現發送郵件的功能?
下面的是一個專門用來發送郵件的類(封裝好了,可以直接編譯成動態鏈接庫,方便以后重復使用)(默認是以Html格式發送的郵件)

using System; using System.IO; using System.Net.Mail; using System.Net.Mime; namespace DllLibrary.SendEmail { /// <summary> /// 發送郵件的類 /// </summary> public class Email { private MailMessage mMailMessage; //主要處理發送郵件的內容(如:收發人地址、標題、主體、圖片等等) private SmtpClient mSmtpClient; //主要處理用smtp方式發送此郵件的配置信息(如:郵件服務器、發送端口號、驗證方式等等) private int mSenderPort; //發送郵件所用的端口號(htmp協議默認為25) private string mSenderServerHost; //發件箱的郵件服務器地址(IP形式或字符串形式均可) private string mSenderPassword; //發件箱的密碼 private string mSenderUsername; //發件箱的用戶名(即@符號前面的字符串,例如:hello@163.com,用戶名為:hello) private bool mEnableSsl; //是否對郵件內容進行socket層加密傳輸 private bool mEnablePwdAuthentication; //是否對發件人郵箱進行密碼驗證 ///<summary> /// 構造函數 ///</summary> ///<param name="server">發件箱的郵件服務器地址</param> ///<param name="toMail">收件人地址(可以是多個收件人,程序中是以“;"進行區分的)</param> ///<param name="fromMail">發件人地址</param> ///<param name="subject">郵件標題</param> ///<param name="emailBody">郵件內容(可以以html格式進行設計)</param> ///<param name="username">發件箱的用戶名(即@符號前面的字符串,例如:hello@163.com,用戶名為:hello)</param> ///<param name="password">發件人郵箱密碼</param> ///<param name="port">發送郵件所用的端口號(htmp協議默認為25)</param> ///<param name="sslEnable">true表示對郵件內容進行socket層加密傳輸,false表示不加密</param> ///<param name="pwdCheckEnable">true表示對發件人郵箱進行密碼驗證,false表示不對發件人郵箱進行密碼驗證</param> public Email(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port, bool sslEnable, bool pwdCheckEnable) { try { mMailMessage = new MailMessage(); mMailMessage.To.Add(toMail); mMailMessage.From = new MailAddress(fromMail); mMailMessage.Subject = subject; mMailMessage.Body = emailBody; mMailMessage.IsBodyHtml = true; mMailMessage.BodyEncoding = System.Text.Encoding.UTF8; mMailMessage.Priority = MailPriority.Normal; this.mSenderServerHost = server; this.mSenderUsername = username; this.mSenderPassword = password; this.mSenderPort = Convert.ToInt32(port); this.mEnableSsl = sslEnable; this.mEnablePwdAuthentication = pwdCheckEnable; } catch (Exception ex) { throw ex; //Console.WriteLine(ex.ToString()); } } ///<summary> /// 添加附件 ///</summary> ///<param name="attachmentsPath">附件的路徑集合,以分號分隔</param> public void AddAttachments(string attachmentsPath) { try { string[] path = attachmentsPath.Split(';'); //以什么符號分隔可以自定義 Attachment data; ContentDisposition disposition; for (int i = 0; i < path.Length; i++) { data = new Attachment(path[i], MediaTypeNames.Application.Octet); disposition = data.ContentDisposition; disposition.CreationDate = File.GetCreationTime(path[i]); disposition.ModificationDate = File.GetLastWriteTime(path[i]); disposition.ReadDate = File.GetLastAccessTime(path[i]); mMailMessage.Attachments.Add(data); } } catch (Exception ex) { throw ex; //Console.WriteLine(ex.ToString()); } } /// <summary> /// 郵件的發送 /// </summary> /// <returns>發送成功返回true,否則返回false</returns> public bool Send() { try { if (mMailMessage != null) { mSmtpClient = new SmtpClient(); //mSmtpClient.Host = "smtp." + mMailMessage.From.Host; mSmtpClient.Host = this.mSenderServerHost; mSmtpClient.Port = this.mSenderPort; mSmtpClient.UseDefaultCredentials = false; mSmtpClient.EnableSsl = this.mEnableSsl; if (this.mEnablePwdAuthentication) { System.Net.NetworkCredential nc = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword); //mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword); //NTLM: Secure Password Authentication in Microsoft Outlook Express mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM"); } else { mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword); } mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; mSmtpClient.Send(mMailMessage); } } catch { return false; } return true; } } }
使用這個發送郵箱類的實例代碼:

using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.Mvc; using System.Web.Security; using Test.Models; using DllLibrary.SendEmail;//引入對應命名空間 namespace Test.Controllers { public class HomeController : Controller { /// <summary> /// 發送郵件 /// </summary> /// <param name="title">郵件主題</param> /// <param name="email">要發送對象的郵箱</param> /// <param name="content">郵件內容</param> /// <returns></returns> public ActionResult SendMail(string title, string email, string content) { string senderServerIp = "smtp.163.com"; //使用163代理郵箱服務器(也可是使用qq的代理郵箱服務器,但需要與具體郵箱對相應) string toMailAddress = email; //要發送對象的郵箱 string fromMailAddress = "XXXXXX@163.com";//你的郵箱 string subjectInfo = title; //主題 string bodyInfo = "<p>" + content + "</p>";//以Html格式發送的郵件 string mailUsername = "XXX"; //登錄郵箱的用戶名 string mailPassword = "xomeagyungxzhsxf"; //對應的登錄郵箱的第三方密碼(你的郵箱不論是163還是qq郵箱,都需要自行開通stmp服務) string mailPort = "25"; //發送郵箱的端口號 //string attachPath = "E:\\123123.txt; E:\\haha.pdf"; //創建發送郵箱的對象 Email myEmail = new Email(senderServerIp, toMailAddress, fromMailAddress, subjectInfo, bodyInfo, mailUsername, mailPassword, mailPort, false, false); //添加附件 //email.AddAttachments(attachPath); if (myEmail.Send()) { return Content("<script>alert('郵件已成功發送!')</script>"); } else { return Content("<script>alert('郵件發送失敗!')</script>"); } } } }
簡單說明:要發送郵件,需要開通一個stmp服務的郵箱號。(可以到163官網申請一個163郵箱,並且開通stmp服務就可以了(注:示例代碼中所使用的密碼是在開通stmp服務時,單獨發送的第三方登錄密碼,而不是登錄郵箱的密碼))
好了,這次分享就到這里了,下次繼續。。。
<我的博客主頁>:http://www.cnblogs.com/forcheng/