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