• 分享一个异步发送邮件的类


       首先要定义一个邮件信息的基类,如下所示:

    /// <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
        }




  • 相关阅读:
    mytest3.py-api接入平台获取数据
    对比python的进程和线程:多线程是假的
    bug-sqlite3
    安装python3 centos
    句式英语
    java组件学习15天
    areas表-省市区
    中转复制
    追踪路由的2种方法
    干掉头疼的finished with non-zero exit value 2
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2336478.html
Copyright © 2020-2023  润新知