C#发送邮件工具类
2014-10-27 08:45
435 查看
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); } }
相关文章推荐
- 【C#工具类】发送邮件(带有图片和附件)
- C#邮件发送工具类
- 转载自http://www.xuanxi.net/Article/Catalog6/10748.html的C#写邮件发送程序
- C#使用CDO发送邮件
- C# 发送邮件
- c#发送需要smtp认证的邮件
- c#发送需要smtp认证的邮件
- C#发送邮件
- C#批量发送邮件程序
- C# 创建邮件发送组件(SMTP)(转)
- 在C#编写代码发送邮件
- c#jmail发送邮件(摘)
- c#中使用自带的邮件发送组件发送邮件~
- C#使用CDO发送邮件
- c#.net 下的邮件发送(含附件)
- C#发送邮件
- C#使用CDO发送邮件
- C#使用CDO发送邮件
- C# - MailSender 邮件发送组件源代码 (支持ESMTP, 附件)
- 下面是几段C#发送邮件相关的代码,我也懒得说明了,就这么个意思。