发送邮件组件

来源:互联网 发布:淘宝买家秀看不到了 编辑:程序博客网 时间:2024/06/05 15:00

直接上代码了,可以改改命名空间后直接复用,只需要把类的属性设置好,然后调用发送邮件方法就可以了,没有问题!

using System;using System.Net;using System.Collections.Generic;using System.Text;namespace IBSTech.Platform.GbModule.Utility{    public class Mail    {        //邮件发送客户端        private System.Net.Mail.SmtpClient client;        //邮件发送的消息        private System.Net.Mail.MailMessage _message;        #region 构造函数        /// <summary>        /// 构造自定义参数的Mail客户端        /// </summary>        /// <param name="host">Mail客户端Host</param>        /// <param name="port">Mail客户端端口</param>        public Mail(string host, int port)        {            this.client = new System.Net.Mail.SmtpClient(host, port);            this._message = new System.Net.Mail.MailMessage();        }        /// <summary>        /// 构造host和port默认为smtp.qq.com和25的Mail客户端        /// </summary>        public Mail()            : this("smtp.qq.com", 25)        { }        #endregion        #region 邮件部件,属性        private string _from;        /// <summary>        /// 获取或设置邮件发送人地址         /// </summary>        public string From        {            get { return this._from; }            set            {                this._from = value;                this._message.From = new System.Net.Mail.MailAddress(value);                this._message.Sender = new System.Net.Mail.MailAddress(value);            }        }        private string _passWord;        /// <summary>        /// 获取或设置邮件发送人密码        /// </summary>        public string PassWord        {            get { return _passWord; }            set { _passWord = value; }        }        private List<string> _attachment;        /// <summary>        /// 获取或设置邮件附件地址列表        /// </summary>        public List<string> Attachment        {            get            {                return _attachment;            }            set            {                this._attachment = value;                StringBuilder sb = new StringBuilder();                foreach (string localPath in value)                {                    if (System.IO.File.Exists(localPath))                    {                        this._message.Attachments.Add(new System.Net.Mail.Attachment(localPath));                    }                    else                    {                        sb.Append(localPath + "\r\n");                    }                }                if (sb.Length != 0)                    System.Windows.Forms.MessageBox.Show(sb.ToString() + "给定地址附件不存在,请检查");            }        }        private List<string> _bcc;        /// <summary>        /// 获取或设置邮件密送人地址列表        /// </summary>        public List<string> BCC        {            get { return _bcc; }            set            {                this._bcc = value;                StringBuilder sb = new StringBuilder();                foreach (string bcc in value)                {                    if (InvalidMail.isEmail(bcc))                    {                        this._message.Bcc.Add(bcc);                    }                    else                    {                        sb.Append(bcc + "\r\n");                    }                }                if (sb.Length != 0)                    System.Windows.Forms.MessageBox.Show(sb.ToString() + "邮件地址格式不正确,请检查");            }        }        private List<string> _cc;        /// <summary>        /// 获取或设置邮件抄送人地址列表        /// </summary>        public List<string> CC        {            get { return _cc; }            set            {                _cc = value;                StringBuilder sb = new StringBuilder();                foreach (string cc in value)                {                    if (InvalidMail.isEmail(cc))                    {                        this._message.CC.Add(cc);                    }                    else                    {                        sb.Append(cc + "\r\n");                    }                }                if (sb.Length != 0)                    System.Windows.Forms.MessageBox.Show(sb.ToString() + "邮件地址格式不正确,请检查");            }        }        /// <summary>        /// 获取或设置邮件正文        /// </summary>        public string Body        {            get { return this._message.Body; }            set { this._message.Body = value; }        }        /// <summary>        /// 获取或设置邮件正文是否Html格式        /// </summary>        public bool IsHtml        {            get { return this._message.IsBodyHtml; }            set { this._message.IsBodyHtml = value; }        }        /// <summary>        /// 获取或设置邮件正文的编码格式        /// </summary>        public Encoding BodyEncoding        {            get { return this._message.BodyEncoding; }            set { this._message.BodyEncoding = value; }        }        /// <summary>        /// 获取或设置获取或设置邮件主题        /// </summary>        public string Subject        {            get { return this._message.Subject; }            set { this._message.Subject = value; }        }        /// <summary>        /// 获取或设置邮件主题编码        /// </summary>        public Encoding SubjectEncoding        {            get { return this._message.SubjectEncoding; }            set { this._message.SubjectEncoding = value; }        }        private List<string> _to;        /// <summary>        /// 获取或设置收件人列表        /// </summary>        public List<string> To        {            get            {                return _to;            }            set            {                _to = value;                StringBuilder sb = new StringBuilder();                foreach (string to in value)                {                    if (InvalidMail.isEmail(to))                    {                        this._message.To.Add(to);                    }                    else                    {                        sb.Append(to + "\r\n");                    }                }                if (sb.Length != 0)                    System.Windows.Forms.MessageBox.Show(sb.ToString() + "邮件地址格式不正确,请检查");            }        }        #endregion        #region 发送邮件        /// <summary>        /// 检查邮件必要信息是否存在        /// </summary>        /// <returns></returns>        private bool CheckMail()        {            bool flag = true;            if (this.Body == null)            {                flag = false;                System.Windows.Forms.MessageBox.Show("邮件正文不能为空");            }            if (this.From == null)            {                flag = false;                System.Windows.Forms.MessageBox.Show("邮件发送人不能为空");            }            if (this.PassWord == null)            {                flag = false;                System.Windows.Forms.MessageBox.Show("邮件发送人密码不能为空");            }            if (this.To == null)            {                flag = false;                System.Windows.Forms.MessageBox.Show("邮件收件人不能为空");            }            if (this.Subject == null)            {                flag = false;                System.Windows.Forms.MessageBox.Show("邮件主题不能为空");            }            return flag;        }        /// <summary>        /// 同步发送邮件        /// </summary>        /// <returns></returns>        public bool SendMail()        {            bool flag = false;            if (CheckMail())            {                try                {                    this.client.Credentials = new System.Net.NetworkCredential(_from, PassWord);                    this.client.Send(this._message);                    flag = true;                }                catch (System.InvalidOperationException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (System.ArgumentNullException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (System.ArgumentOutOfRangeException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (System.Net.Mail.SmtpException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (Exception e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }            }            return flag;        }        /// <summary>        /// 异步发送邮件        /// </summary>        public void SendMailAsync()        {            if (CheckMail())            {                try                {                    this.client.Credentials = new System.Net.NetworkCredential(_from, PassWord);                    this.client.SendCompleted += new System.Net.Mail.SendCompletedEventHandler(client_SendCompleted);                    object flag = this._message;                    this.client.SendAsync(this._message, flag);                }                catch (System.InvalidOperationException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (System.ArgumentNullException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (System.ArgumentOutOfRangeException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (System.Net.Mail.SmtpException e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }                catch (Exception e)                {                    System.Windows.Forms.MessageBox.Show(e.Message);                }            }        }        /// <summary>        /// 异步发送邮件完成时事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)        {            System.Net.Mail.MailMessage message = (System.Net.Mail.MailMessage)e.UserState;            if (e.Cancelled)            {                if (SendComplet != null)                {                    SendComplet(this, new SendCompletEventArgs(DateTime.Now, false));                }            }            else if (e.Error != null)            {                if (SendComplet != null)                {                    SendComplet(this, new SendCompletEventArgs(DateTime.Now, false));                }            }            else            {                if (SendComplet != null)                {                    SendComplet(this, new SendCompletEventArgs(DateTime.Now, true));                }            }        }        public event SendCompletEventHandler SendComplet;        #endregion    }    /// <summary>    /// 邮件异步发送完成时发生事件的委托    /// </summary>    /// <param name="sender"></param>    /// <param name="e"></param>    public delegate void SendCompletEventHandler(object sender,EventArgs e);    /// <summary>    /// 自定义参数    /// </summary>    public class SendCompletEventArgs : EventArgs    {        public readonly DateTime dateTime;        public readonly bool success;        public SendCompletEventArgs(DateTime dateTime, bool success)        {            this.dateTime = dateTime;            this.success = success;        }    }    /// <summary>    /// 静态验证类    /// </summary>    public static class InvalidMail    {        /// <summary>        /// 判断用户输入的字符串是否符合邮件地址格式        /// </summary>        /// <param name="email"></param>        /// <returns></returns>        public static bool isEmail(string email)        {            string valid = @"^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+{1}quot;;            return System.Text.RegularExpressions.Regex.IsMatch(email, valid);        }    }}


客户端调用邮件发送例子:

        /// <summary>        /// 发送邮件        /// </summary>        private void SendMail()        {            Mail mail = new Mail();            //设置邮件附件            //非必要            List<string> attachment=new List<string> ();            OpenFileDialog ofd = new OpenFileDialog();            if (ofd.ShowDialog() == DialogResult.OK)            {                foreach (string path in ofd.FileNames)                {                    attachment.Add(path);                }            }            mail.Attachment = attachment;            //设置邮件密送人列表            //非必要            List<string> bcc = new List<string>();            bcc.Add("xxxx@qq.com");            bcc.Add("yyyy@qq.com");            mail.BCC = bcc;            //设置抄送人列表            //非必要            List<string> cc = new List<string>();            cc.Add("aaaa.qq.com");            cc.Add("bbbb.qq.com");            mail.CC = cc;            //设置邮件正文            //非必要            mail.Body = "Microsoft Visual Studio<br/>C#.Net";            //设置邮件正文编码格式            //非必要            mail.BodyEncoding = Encoding.UTF8;            //设置邮件发送人邮箱地址            //必要            mail.From = "userName@qq.com";            //设置邮件发送人邮箱密码            //非必要            mail.PassWord = "passWord";            //邮件正文是否以html格式在邮件中显示            //如果为false,则收件人收到的邮件正文为:Microsoft Visual Studio<br/>C#.Net            //如果为true,则收件人收到的邮件正文如下:            //Microsoft Visual Studio            //C#.Net            //非必要            mail.IsHtml = true;            //设置邮件标题            //非必要            mail.Subject = "try";            //设置邮件收件人            //必要            List<string> to = new List<string>();            to.Add("qqqq@qq.com");            to.Add("wwww@qq.com");            to.Add("rrrr@qq.com");            mail.To = to;            //发送邮件,使用该方法在发送邮件时,线程会阻断,直到邮件发送完成            if (mail.SendMail())            {                Console.WriteLine("do something");            }            //增加异步发送邮件事件            mail.SendComplet+=new SendCompletEventHandler(mail_SendComplet);            //异步发送邮件,使用该方法发送邮件时,线程不会被阻断            //邮件发送完成后,会引发SendComplet事件            mail.SendMailAsync();        }        /// <summary>        /// 异步邮件发送完成后        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        void mail_SendComplet(object sender, SendCompletEventArgs e)        {            Console.WriteLine("do something");        }


原创粉丝点击