public class EmailHelper
{
#region Fields
private static object asyncObj = new object();
#endregion
#region Singleton
private static EmailHelper instance;
public static EmailHelper Instance
{
get
{
lock (asyncObj)
{
if (instance == null)
{
instance = new EmailHelper();
}
return instance;
}
}
}
#endregion
/// <summary>
/// 发送mail
/// </summary>
/// <param name="fromAddress">发送地址</param>
/// <param name="subject">主题</param>
/// <param name="body">内容</param>
/// <param name="userName">用户名</param>
/// <param name="password">密码</param>
/// <param name="toAddress">收件人地址集合</param>
/// <param name="emailType">邮件类型(自定义枚举)</param>
/// <param name="attachments">附件集合</param>
/// <param name="ccAddress">CC(抄送)地址集合</param>
/// <param name="bccAddress">BCC(密送)地址集合</param>
/// <param name="isEnableSsl">是否打开SSL</param>
/// <param name="notificationOpetion">邮件发送通知选项</param>
public void SendMail(string fromAddress, string subject, string body,
string userName, string password,
string[] toAddress,
EmailTypeEnum emailType,
string[] attachments = null,
string[] ccAddress = null,
string[] bccAddress = null,
bool isEnableSsl = false,
DeliveryNotificationOptions notificationOpetion = DeliveryNotificationOptions.Never)
{
MailMessage mail = new MailMessage();
mail.Subject = subject;
mail.IsBodyHtml = true;
mail.BodyEncoding = Encoding.UTF8;
mail.DeliveryNotificationOptions = notificationOpetion;
mail.Body = body;
mail.From = new MailAddress(fromAddress);
toAddress.ToList().ForEach((ele) =>
{
mail.To.Add(new MailAddress(ele));
});
if (attachments != null)
{
attachments.ToList().ForEach((ele) =>
{
mail.Attachments.Add(new Attachment(ele));
});
}
if (ccAddress != null)
{
ccAddress.ToList().ForEach((ele) =>
{
mail.CC.Add(new MailAddress(ele));
});
}
if (bccAddress != null)
{
bccAddress.ToList().ForEach((ele) =>
{
mail.Bcc.Add(new MailAddress(ele));
});
}
SmtpClient client = new SmtpClient();
client.EnableSsl = isEnableSsl;
client.Host = GetEmailHostByEmailType(emailType);
client.Port = 25;
client.Credentials = new NetworkCredential(userName, password);
client.Send(mail);
}
/// <summary>
/// 根据枚举类型获取邮件主机地址
/// </summary>
/// <param name="emailType"></param>
/// <returns></returns>
private string GetEmailHostByEmailType(EmailTypeEnum emailType)
{
switch (emailType)
{
case EmailTypeEnum.Email163:
{
return "smtp.163.com";
}
case EmailTypeEnum.EmailSohu:
{
return "smtp.sohu.com";
}
case EmailTypeEnum.Email126:
{
return "smtp.126.com";
}
case EmailTypeEnum.Sina:
{
return "smtp.sina.com";
}
default:
{
return "smtp.163.com";
}
}
}
}
public enum EmailTypeEnum
{
Email163,
EmailSohu,
Email126,
Sina
}