using System; using System.Net; using System.Net.Mail; using System.Text; using Utils; namespace SiteCore { /// /// 邮件发送成功之后执行的方法 /// public interface ISuccessCallback { /// /// 邮件发送成功之后执行的方法 /// void SuccessRun(); } /// /// 邮件发送服务(如果因为网络不通等原因发送失败,则会自动记录日志) /// /// /// 使用说明 /// /// MailService mail = new MailService( "smtp.gmail.com", "aaa@gmail.com", "123456" ); /// mail.setSender( "岳不群" ); // 此行(即发送人)可省略 /// mail.send( "aaa@126.com", "岳老二的邮件标题", "此处内容,此处html部分" /// /// public class MailService { private readonly String _smtpUrl = config.Instance.dics["smtpUrl"]; private readonly String _smtpUser = config.Instance.dics["mailUser"]; private readonly String _smtpPwd = config.Instance.dics["mailPwd"]; private String _senderName; private Boolean _enableSsl = true; private MailPriority _mailPriority = MailPriority.Normal; private Boolean _isBodyHtml = true; private ISuccessCallback sendSuccessCallback; /// /// 创建一个发送对象 /// /// smtp 地址 /// 登录名 /// 密码 public MailService(String smtpUrl, String user, String pwd) { _smtpUrl = smtpUrl; _smtpUser = user; _smtpPwd = pwd; } public MailService() { //_smtpUrl = config.Instance.Site.SmtpUrl; //_smtpUser = config.Instance.Site.SmtpUser; //_smtpPwd = config.Instance.Site.SmtpPwd; } /// /// 是否启用 ssl 链接(默认是启用的) /// /// public void enableSsl(Boolean isSsl) { _enableSsl = isSsl; } /// /// 默认启用 html /// /// public void isBodyHtml(Boolean isHtml) { _isBodyHtml = isHtml; } /// /// 设置高优先级 /// public void priorityHight() { _mailPriority = MailPriority.High; } /// /// 设置低优先级 /// public void priorityLow() { _mailPriority = MailPriority.Low; } /// /// 设置普通优先级 /// public void priorityNormal() { _mailPriority = MailPriority.Normal; } /// /// 设置发送者名称 /// /// public void setSender(String name) { _senderName = name; } /// /// 设置发送成功之后执行的方法 /// /// public void successCallback(ISuccessCallback action) { sendSuccessCallback = action; } /// /// 发送方法 /// /// 接收方的email /// 邮件标题 /// 邮件内容 /// 是否成功 public Boolean send(String to, String title, String htmlBody) { if (strUtil.IsNullOrEmpty(_senderName)) _senderName = _smtpUser; using (MailMessage message = new MailMessage()) { message.Subject = title; message.SubjectEncoding = Encoding.UTF8; message.From = new MailAddress(_smtpUser, _senderName, Encoding.UTF8); string[] tArr = to.Split(','); foreach (string t in tArr) { message.To.Add(new MailAddress(t, t, Encoding.UTF8)); } message.Body = htmlBody; message.BodyEncoding = Encoding.UTF8; message.IsBodyHtml = _isBodyHtml; message.Priority = _mailPriority; SmtpClient client = new SmtpClient(_smtpUrl); client.UseDefaultCredentials = true; client.Credentials = new NetworkCredential(_smtpUser, _smtpPwd); client.EnableSsl = _enableSsl; try { client.Send(message); if (sendSuccessCallback != null) sendSuccessCallback.SuccessRun(); return true; } catch (SmtpException ex) { String info = "send mail to " + to + " : " + title; throw; } } } } }