MailService.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using System;
  2. using System.Net;
  3. using System.Net.Mail;
  4. using System.Text;
  5. using Utils;
  6. namespace SiteCore
  7. {
  8. /// <summary>
  9. /// 邮件发送成功之后执行的方法
  10. /// </summary>
  11. public interface ISuccessCallback
  12. {
  13. /// <summary>
  14. /// 邮件发送成功之后执行的方法
  15. /// </summary>
  16. void SuccessRun();
  17. }
  18. /// <summary>
  19. /// 邮件发送服务(如果因为网络不通等原因发送失败,则会自动记录日志)
  20. /// </summary>
  21. /// <example>
  22. /// 使用说明
  23. /// <code>
  24. /// MailService mail = new MailService( "smtp.gmail.com", "aaa@gmail.com", "123456" );
  25. /// mail.setSender( "岳不群" ); // 此行(即发送人)可省略
  26. /// mail.send( "aaa@126.com", "岳老二的邮件标题", "此处内容,此处<strong style='color:red;font-size:36px;'>html部分</strong>"
  27. /// </code>
  28. /// </example>
  29. public class MailService
  30. {
  31. private readonly String _smtpUrl = config.Instance.dics["smtpUrl"];
  32. private readonly String _smtpUser = config.Instance.dics["mailUser"];
  33. private readonly String _smtpPwd = config.Instance.dics["mailPwd"];
  34. private String _senderName;
  35. private Boolean _enableSsl = true;
  36. private MailPriority _mailPriority = MailPriority.Normal;
  37. private Boolean _isBodyHtml = true;
  38. private ISuccessCallback sendSuccessCallback;
  39. /// <summary>
  40. /// 创建一个发送对象
  41. /// </summary>
  42. /// <param name="smtpUrl">smtp 地址</param>
  43. /// <param name="user">登录名</param>
  44. /// <param name="pwd">密码</param>
  45. public MailService(String smtpUrl, String user, String pwd)
  46. {
  47. _smtpUrl = smtpUrl;
  48. _smtpUser = user;
  49. _smtpPwd = pwd;
  50. }
  51. public MailService()
  52. {
  53. //_smtpUrl = config.Instance.Site.SmtpUrl;
  54. //_smtpUser = config.Instance.Site.SmtpUser;
  55. //_smtpPwd = config.Instance.Site.SmtpPwd;
  56. }
  57. /// <summary>
  58. /// 是否启用 ssl 链接(默认是启用的)
  59. /// </summary>
  60. /// <param name="isSsl"></param>
  61. public void enableSsl(Boolean isSsl)
  62. {
  63. _enableSsl = isSsl;
  64. }
  65. /// <summary>
  66. /// 默认启用 html
  67. /// </summary>
  68. /// <param name="isHtml"></param>
  69. public void isBodyHtml(Boolean isHtml)
  70. {
  71. _isBodyHtml = isHtml;
  72. }
  73. /// <summary>
  74. /// 设置高优先级
  75. /// </summary>
  76. public void priorityHight()
  77. {
  78. _mailPriority = MailPriority.High;
  79. }
  80. /// <summary>
  81. /// 设置低优先级
  82. /// </summary>
  83. public void priorityLow()
  84. {
  85. _mailPriority = MailPriority.Low;
  86. }
  87. /// <summary>
  88. /// 设置普通优先级
  89. /// </summary>
  90. public void priorityNormal()
  91. {
  92. _mailPriority = MailPriority.Normal;
  93. }
  94. /// <summary>
  95. /// 设置发送者名称
  96. /// </summary>
  97. /// <param name="name"></param>
  98. public void setSender(String name)
  99. {
  100. _senderName = name;
  101. }
  102. /// <summary>
  103. /// 设置发送成功之后执行的方法
  104. /// </summary>
  105. /// <param name="action"></param>
  106. public void successCallback(ISuccessCallback action)
  107. {
  108. sendSuccessCallback = action;
  109. }
  110. /// <summary>
  111. /// 发送方法
  112. /// </summary>
  113. /// <param name="to">接收方的email</param>
  114. /// <param name="title">邮件标题</param>
  115. /// <param name="htmlBody">邮件内容</param>
  116. /// <returns>是否成功</returns>
  117. public Boolean send(String to, String title, String htmlBody)
  118. {
  119. if (strUtil.IsNullOrEmpty(_senderName)) _senderName = _smtpUser;
  120. using (MailMessage message = new MailMessage())
  121. {
  122. message.Subject = title;
  123. message.SubjectEncoding = Encoding.UTF8;
  124. message.From = new MailAddress(_smtpUser, _senderName, Encoding.UTF8);
  125. string[] tArr = to.Split(',');
  126. foreach (string t in tArr)
  127. {
  128. message.To.Add(new MailAddress(t, t, Encoding.UTF8));
  129. }
  130. message.Body = htmlBody;
  131. message.BodyEncoding = Encoding.UTF8;
  132. message.IsBodyHtml = _isBodyHtml;
  133. message.Priority = _mailPriority;
  134. SmtpClient client = new SmtpClient(_smtpUrl);
  135. client.UseDefaultCredentials = true;
  136. client.Credentials = new NetworkCredential(_smtpUser, _smtpPwd);
  137. client.EnableSsl = _enableSsl;
  138. try
  139. {
  140. client.Send(message);
  141. if (sendSuccessCallback != null)
  142. sendSuccessCallback.SuccessRun();
  143. return true;
  144. }
  145. catch (SmtpException ex)
  146. {
  147. String info = "send mail to " + to + " : " + title;
  148. throw;
  149. }
  150. }
  151. }
  152. }
  153. }