您的位置:首页 > 编程语言 > C#

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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: