C#发送邮件工具类

来源:互联网 发布:上海数据恢复公司 编辑:程序博客网 时间:2024/06/06 01:13
public class MailHelper    {        private string _smtpServer;        private int _port;        private string _mailFrom;        private string _password;        private int _timeout;        private string _mailTo;        private string _mailCc;        private string _mailBcc;        private string _mailSubject;        private string _mailBody;        private bool _hasAttachment=false;        private ArrayList  _attachmentPathList;        private decimal _attachmentMaxSize;        /// <summary>        /// 属性:邮件SMTP服务器        /// </summary>        public string SMTPServer        {            set { _smtpServer = value; }            get { return _smtpServer; }        }        /// <summary>        /// 属性:邮件SMTP服务器端口号        /// </summary>        public int Port        {            set { _port = value; }            get { return _port; }        }        /// <summary>        /// 属性:邮件发送人        /// </summary>        public string MailFrom        {            set { _mailFrom = value; }            get { return _mailFrom; }        }        /// <summary>        /// 属性:发件人邮件SMTP服务器认证密码        /// </summary>        public string Password        {            set { _password = value; }            get { return _password; }        }        /// <summary>        /// 邮件发送超时间        /// </summary>        public int Timeout        {            set { _timeout = value; }            get { return _timeout; }        }        /// <summary>        /// 属性:邮件收件人列表        /// </summary>        public string MailTo        {            set { _mailTo = value; }            get { return _mailTo; }        }        /// <summary>        /// 属性:邮件抄送人列表        /// </summary>        public string MailCc        {            set { _mailCc = value; }            get { return _mailCc; }        }        /// <summary>        /// 属性:邮件密送人列表        /// </summary>        public string MailBcc        {            set { _mailBcc = value; }            get { return _mailBcc; }        }        /// <summary>        /// 属性:邮件主题        /// </summary>        public string MailSubject        {            set { _mailSubject = value; }            get { return _mailSubject; }        }                 /// <summary>        /// 属性:邮件内容        /// </summary>        public string MailBody        {            set { _mailBody = value; }            get { return _mailBody; }        }        /// <summary>        /// 是否包含附件        /// </summary>        public bool HasAttachment        {            set { _hasAttachment = value; }            get { return _hasAttachment; }        }        /// <summary>        /// 附件文件路径列表        /// </summary>        public ArrayList AttachmentPathList        {            set { _attachmentPathList = value; }            get { return _attachmentPathList; }        }        /// <summary>        /// 附件最大的大小        /// </summary>        public decimal AttachmentMaxSize        {            get { return _attachmentMaxSize; }            set { _attachmentMaxSize = value; }         }        /// <summary>        /// 空白构造函数        /// </summary>        public MailHelper()        {            Initialization();        }        #region 检测附件大小        private bool ValidateAttachmentSize(string AttachmentPath, decimal AttchmentMaxSize)        {                FileStream FileStream_my = new FileStream(AttachmentPath, FileMode.Open);                string name = FileStream_my.Name;                decimal size = (decimal)(FileStream_my.Length / 1024 / 1024);                FileStream_my.Close();                FileStream_my.Dispose();                //控制文件大小不大于10M                if (size > AttchmentMaxSize)                {                    return false;                }                else                {                    return true;                }                   }        #endregion        #region 获取邮件地址中用户名部分        /// <summary>        /// 获取邮件地址中用户名部分        /// </summary>        /// <param name="MailAddress">邮件地址</param>        /// <returns></returns>        private string GetMailUserName(string MailAddress)        {            MailAddress = MailAddress.Trim();            int separatorPos = MailAddress.IndexOf('@');            string userName = MailAddress.Substring(1, separatorPos - 1);            return userName;        }        #endregion        #region  验证输入字符串为E-mail地址        public bool ValidateEmail(string EmailAddress)        {            EmailAddress = EmailAddress.Trim();            string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";            Regex re = new Regex(strRegex);            if (re.IsMatch(EmailAddress))            {                return true;            }            else            {                return false;            }        }        #endregion        #region 将EMAIL地址字符串转换成EMAIL地址列表        /// <summary>        /// 将EMAIL地址字符串转换成EMAIL地址列表        /// </summary>        /// <param name="MailAddressString">EMAIL地址字符串</param>        /// <returns>EMAIL地址列表</returns>        private List<MailAddress> ConvertToMailAdress(string MailAddressString)        {            List<MailAddress> myAddressList = new List<MailAddress>();            string displayName = "";            string address = "";            if (string.IsNullOrEmpty(MailAddressString))            {                throw new Exception("输入的邮件地址字符串为空");            }            MailAddressString=MailAddressString.Trim().TrimEnd(new char[]{';',','});            string[] mailString = MailAddressString.Split(new char[] { ';', ',' });            for (int i = 0; i < mailString.Length; i++)            {                int speratorStartPos = mailString[i].IndexOf('<');                int speratorEndPos = mailString[i].LastIndexOf('>');                //如果地址中存在格式1234<6789@123.com>                if (speratorStartPos != -1 && speratorEndPos != -1)                {                    if (speratorEndPos < speratorStartPos)                    {                        throw new Exception("邮件地址:" + mailString[i] + "格式不正确");                    }                    displayName = mailString[i].Substring(0, speratorStartPos).Trim();                    address = mailString[i].Substring(speratorStartPos + 1, speratorEndPos - speratorStartPos-1).Trim();                    if (!this.ValidateEmail(address))                    {                        throw new Exception("邮件地址:" + mailString[i] + "格式不正确");                    }                    else                    {                        MailAddress myMailAdree = new MailAddress(address, displayName);                        myAddressList.Add(myMailAdree);                    }                }                else                {                    //否则直接认为是EMAIL地址                    if (!this.ValidateEmail(mailString[i].Trim()))                    {                        throw new Exception("邮件地址:" + mailString[i] + "格式不正确");                    }                    else if (mailString[i].Trim()!="")                    {                                                MailAddress myMailAdree = new MailAddress(mailString[i].Trim());                        myAddressList.Add(myMailAdree);                    }                 }            }            return myAddressList;        }        #endregion        #region 发送邮件        /// <summary>        /// 发送邮件        /// </summary>        public void SendMail()        {            SmtpClient smtpClient = null;  //设置SMTP协议            List<MailAddress> myAdressList = new List<MailAddress>();            MailAddress mailAddressFrom = null; //设置发信人地址  当然还需要密码            MailMessage mailMessageMail = new MailMessage();            //检测附件大小 发件必需小于10M 否则返回  不会执行以下代码            if (_attachmentPathList!=null && _hasAttachment && _attachmentMaxSize > 0)            {                for (int i = 0; i < _attachmentPathList.Count; i++)                {                    string attachmentPath = _attachmentPathList[i].ToString().Trim();                    if (!ValidateAttachmentSize(attachmentPath, _attachmentMaxSize))                    {                        throw new Exception("附件" + attachmentPath + "超出了预设的文件大小,无法发送");                    }                }            }            if (string.IsNullOrEmpty(_smtpServer.Trim()))            {                throw new Exception("SMTP服务器地址为空");            }            if (_port.Equals(decimal.Zero))            {                throw new Exception("SMTP服务器端口号为空");            }            if (string.IsNullOrEmpty(_mailFrom.Trim()))            {                throw new Exception("发件人信息为空");            }            if (string.IsNullOrEmpty(_mailTo.Trim()))            {                throw new Exception("收件人列表为空");            }            //实例化发件人地址            myAdressList = this.ConvertToMailAdress(_mailFrom);            if (myAdressList.Count > 1)            {                throw new Exception("发件人地址:" + _mailFrom + "有多个邮件地址");            }            else            {                mailAddressFrom = myAdressList[0];            }            //添加收件人邮箱地址            myAdressList = this.ConvertToMailAdress(_mailTo.Trim());            foreach (MailAddress myAddressTo in myAdressList)            {                mailMessageMail.To.Add(myAddressTo);            }            //添加抄送人邮件地址            if (!string.IsNullOrEmpty(_mailCc))            {                myAdressList = this.ConvertToMailAdress(_mailCc.Trim());                foreach (MailAddress myAddressCc in myAdressList)                {                    mailMessageMail.CC.Add(myAddressCc);                }            }            //添加密送人邮件地址            if (!string.IsNullOrEmpty(_mailBcc))            {                myAdressList = this.ConvertToMailAdress(_mailBcc.Trim());                foreach (MailAddress myAddressBcc in myAdressList)                {                    mailMessageMail.Bcc.Add(myAddressBcc);                }            }            //发件人邮箱            mailMessageMail.From = mailAddressFrom;            //邮件主题            mailMessageMail.Subject = _mailSubject;            mailMessageMail.SubjectEncoding = System.Text.Encoding.UTF8;            //邮件正文            mailMessageMail.Body = _mailBody;            mailMessageMail.BodyEncoding = System.Text.Encoding.UTF8;            mailMessageMail.IsBodyHtml = true;            //清空历史附件  以防附件重复发送            if (mailMessageMail.Attachments != null)            {                mailMessageMail.Attachments.Clear();            }            //如果附件列表不为空,则添加附件            if (_attachmentPathList != null)            {                foreach (object attachmentPath in _attachmentPathList)                {                    mailMessageMail.Attachments.Add(new Attachment(attachmentPath.ToString().Trim(), MediaTypeNames.Application.Octet));                }            }                      try            {                //初始化Smtp服务器信息                smtpClient = new SmtpClient();                smtpClient.Host = _smtpServer;//指定SMTP服务名  例如QQ邮箱为 smtp.qq.com 新浪cn邮箱为 smtp.sina.cn等                smtpClient.Port = _port; //指定端口号                smtpClient.Timeout = _timeout;  //超时时间                                              //验证发件邮箱地址和密码                //创建服务器认证                NetworkCredential NetworkCredential_my = new NetworkCredential(mailMessageMail.From.Address, _password);                //指定发件人信息  包括邮箱地址和邮箱密码                smtpClient.Credentials = new NetworkCredential(mailMessageMail.From.Address, _password);                smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;                     }            catch (Exception Ex)            {                throw new Exception("邮件发送失败,请确定发件邮箱地址和密码的正确性!" + "\n" + "技术信息:\n" + Ex.Message);            }            //发送邮件            smtpClient.Send(mailMessageMail);            }        #endregion         /// <summary>        /// 初始化        /// </summary>        protected void Initialization()        {            string smtpServer = ConfigurationManager.AppSettings["SMTPServer"].ToString().Trim();            string port = ConfigurationManager.AppSettings["Port"] == "" ? "25" : ConfigurationManager.AppSettings["Port"].ToString().Trim();            string mailFrom = ConfigurationManager.AppSettings["MailFrom"].ToString().Trim();            string mailFromName = ConfigurationManager.AppSettings["MailFromName"].ToString().Trim();            string password = ConfigurationManager.AppSettings["Password"].ToString().Trim();            string timeout = ConfigurationManager.AppSettings["MailTimeout"].ToString().Trim();            if (string.IsNullOrEmpty(smtpServer))            {                throw new Exception("邮件信息初始化失败,SMTPServer信息在配置文件App.config未配置");            }            if (string.IsNullOrEmpty(mailFrom))            {                throw new Exception("邮件信息初始化失败,MailFrom信息在配置文件App.config未配置");            }            if (string.IsNullOrEmpty(timeout))            {                throw new Exception("邮件信息初始化失败,MailTimeout信息在配置文件App.config未配置");            }            if (!string.IsNullOrEmpty(mailFromName))            {                mailFrom = mailFromName + "<" + mailFrom + ">";            }            this._smtpServer= smtpServer;            this._port =string.IsNullOrEmpty(port)?0: int.Parse(port);            this._mailFrom = mailFrom;            this._password = password;            this._timeout = string.IsNullOrEmpty(timeout) ? 0 : int.Parse(timeout);        }    }

0 0
原创粉丝点击