分享一个异步发送邮件的C#类代码

12年前
   首先要定义一个邮件信息的基类,如下所示:    /// <summary>      /// Base message class used for emails      /// </summary>      public class Message      {          #region Constructor          /// <summary>          /// Constructor          /// </summary>          public Message()          {          }          #endregion            #region Properties          /// <summary>          /// Whom the message is to          /// </summary>          public virtual string To { get; set; }            /// <summary>          /// The subject of the email          /// </summary>          public virtual string Subject { get; set; }            /// <summary>          /// Whom the message is from          /// </summary>          public virtual string From { get; set; }            /// <summary>          /// Body of the text          /// </summary>          public virtual string Body { get; set; }            #endregion      }    然后定义一个邮件的发送类,使用Netmail的方式发送邮件,发送邮件时采用了.net中自带的线程池,    通过多线程来实现异步的发送,代码如下:     /// <summary>      /// Utility for sending an email      /// </summary>      public class EmailSender : Message      {          #region Constructors            /// <summary>          /// Default Constructor          /// </summary>          public EmailSender()          {              Attachments = new List<Attachment>();              EmbeddedResources = new List<LinkedResource>();              Priority = MailPriority.Normal;          }            #endregion            #region Public Functions            /// <summary>          /// Sends an email          /// </summary>          /// <param name="Message">The body of the message</param>          public void SendMail(string Message)          {              Body = Message;              SendMail();          }            /// <summary>          /// Sends a piece of mail asynchronous          /// </summary>          /// <param name="Message">Message to be sent</param>          public void SendMailAsync(string Message)          {              Body = Message;              ThreadPool.QueueUserWorkItem(delegate { SendMail(); });          }            /// <summary>          /// Sends an email          /// </summary>          public void SendMail()          {              using (System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage())              {                  char[] Splitter = { ',', ';' };                  string[] AddressCollection = To.Split(Splitter);                  for (int x = 0; x < AddressCollection.Length; ++x)                  {                      if(!string.IsNullOrEmpty(AddressCollection[x].Trim()))                          message.To.Add(AddressCollection[x]);                  }                  if (!string.IsNullOrEmpty(CC))                  {                      AddressCollection = CC.Split(Splitter);                      for (int x = 0; x < AddressCollection.Length; ++x)                      {                          if (!string.IsNullOrEmpty(AddressCollection[x].Trim()))                              message.CC.Add(AddressCollection[x]);                      }                  }                  if (!string.IsNullOrEmpty(Bcc))                  {                      AddressCollection = Bcc.Split(Splitter);                      for (int x = 0; x < AddressCollection.Length; ++x)                      {                          if (!string.IsNullOrEmpty(AddressCollection[x].Trim()))                              message.Bcc.Add(AddressCollection[x]);                      }                  }                  message.Subject = Subject;                  message.From = new System.Net.Mail.MailAddress((From));                  AlternateView BodyView = AlternateView.CreateAlternateViewFromString(Body, null, MediaTypeNames.Text.Html);                  foreach (LinkedResource Resource in EmbeddedResources)                  {                      BodyView.LinkedResources.Add(Resource);                  }                  message.AlternateViews.Add(BodyView);                  //message.Body = Body;                  message.Priority = Priority;                  message.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");                  message.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");                  message.IsBodyHtml = true;                  foreach (Attachment TempAttachment in Attachments)                  {                      message.Attachments.Add(TempAttachment);                  }                  System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(Server, Port);                  if (!string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Password))                  {                      smtp.Credentials = new System.Net.NetworkCredential(UserName, Password);                  }                  if (UseSSL)                      smtp.EnableSsl = true;                  else                      smtp.EnableSsl = false;                  smtp.Send(message);              }          }            /// <summary>          /// Sends a piece of mail asynchronous          /// </summary>          public void SendMailAsync()          {              ThreadPool.QueueUserWorkItem(delegate { SendMail(); });          }            #endregion            #region Properties            /// <summary>          /// Any attachments that are included with this          /// message.          /// </summary>          public List<Attachment> Attachments { get; set; }            /// <summary>          /// Any attachment (usually images) that need to be embedded in the message          /// </summary>          public List<LinkedResource> EmbeddedResources { get; set; }            /// <summary>          /// The priority of this message          /// </summary>          public MailPriority Priority { get; set; }            /// <summary>          /// Server Location          /// </summary>          public string Server { get; set; }            /// <summary>          /// User Name for the server          /// </summary>          public string UserName { get; set; }            /// <summary>          /// Password for the server          /// </summary>          public string Password { get; set; }            /// <summary>          /// Port to send the information on          /// </summary>          public int Port { get; set; }            /// <summary>          /// Decides whether we are using STARTTLS (SSL) or not          /// </summary>          public bool UseSSL { get; set; }            /// <summary>          /// Carbon copy send (seperate email addresses with a comma)          /// </summary>          public string CC { get; set; }            /// <summary>          /// Blind carbon copy send (seperate email addresses with a comma)          /// </summary>          public string Bcc { get; set; }            #endregion      }