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
- C#发送邮件工具类
- C#邮件发送工具类
- 邮件发送工具类
- 邮件发送工具类
- 发送邮件工具类
- 邮件发送工具类
- 邮件发送工具类
- c#邮件发送 邮件类
- c# 邮件发送类
- c#发送邮件类
- C#发送邮件类
- 【C#工具类】发送邮件(带有图片和附件)
- javamail发送邮件工具类
- Java发送邮件工具类
- java邮件发送工具类
- 简单发送邮件工具类
- java 邮件发送工具类
- java发送邮件工具类
- mysql事务隔离级别以及有问题的读取(脏读,不可重复读,幻象读)
- R:矩阵元素筛选
- 单片机电路设计必看:让电磁干扰“无处遁形
- 国外程序员整理的 C++ 资源大全
- 石子合并(动态规划)详细解题报告
- C#发送邮件工具类
- 2st
- svn: Error running context: 由于目标计算机积极拒绝,无法连接。
- Python socket 入门
- R:矩阵apply()函数
- Mysql 存储引擎中InnoDB与Myisam的主要区别
- 20141027
- 公司网络web服务器负载均衡解决方案
- android版自定义文件浏览器