EmailHelper.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. using System;
  2. using System.Net;
  3. using System.Net.Mail;
  4. using System.Text;
  5. using MailMessage = System.Net.Mail.MailMessage;
  6. using MailPriority = System.Net.Mail.MailPriority;
  7. namespace CommonTool
  8. {
  9. /// <summary>
  10. /// 邮件公用类
  11. /// </summary>
  12. public class EmailHelper
  13. {
  14. #region 属性
  15. /// <summary>
  16. /// 邮箱账号(默认为发送者邮箱的账号)
  17. /// </summary>
  18. public string UserEmail { get; set; } = "";
  19. /// <summary>
  20. /// 邮箱密码(默认为发送者邮箱的密码),默认格式UTF8
  21. /// </summary>
  22. public string Password { get; set; } = "";
  23. /// <summary>
  24. /// 发送者邮箱
  25. /// </summary>
  26. public string From { get; set; } = "";
  27. /// <summary>
  28. /// 发送者名称
  29. /// </summary>
  30. public string FromName { get; set; } = "";
  31. /// <summary>
  32. /// 接收者邮箱列表
  33. /// </summary>
  34. public string[] To { get; set; } = { "" };
  35. /// <summary>
  36. /// 抄送者邮箱列表
  37. /// </summary>
  38. public string[] Cc { get; set; } = { "" };
  39. /// <summary>
  40. /// 秘抄者邮箱列表
  41. /// </summary>
  42. public string[] Bcc { get; set; } = { "" };
  43. /// <summary>
  44. /// 邮件主题
  45. /// </summary>
  46. public string Subject { get; set; } = "";
  47. /// <summary>
  48. /// 邮件内容
  49. /// </summary>
  50. public string Body { get; set; } = "";
  51. /// <summary>
  52. /// 是否是HTML格式
  53. /// </summary>
  54. public bool IsBodyHtml { get; set; } = true;
  55. /// <summary>
  56. /// 附件列表
  57. /// </summary>
  58. public string[] Attachments { get; set; } = { "" };
  59. /// <summary>
  60. /// 邮箱服务类型(Pop3,SMTP,IMAP,MAIL等),默认为SMTP
  61. /// </summary>
  62. public string ServiceType { get; set; } = "SMTP";
  63. /// <summary>
  64. /// 邮箱服务器
  65. /// </summary>
  66. public string Host { get; set; } = "";
  67. /// <summary>
  68. /// 邮箱服务器端口
  69. /// </summary>
  70. public int Port { get; set; } = 25;
  71. /// <summary>
  72. /// 邮箱优先级
  73. /// </summary>
  74. public MailPriority MailPriority { get; set; } = MailPriority.High;
  75. /// <summary>
  76. /// 邮件编码格式
  77. /// </summary>
  78. public Encoding Encoding { get; set; } = Encoding.UTF8;
  79. #endregion
  80. /// <summary>
  81. /// 发送邮件
  82. /// </summary>
  83. public bool Send()
  84. {
  85. var mailMessage = new MailMessage();
  86. try
  87. {
  88. #region 创建mailMessage
  89. //读取To 接收者邮箱列表
  90. if (To != null && To.Length > 0)
  91. {
  92. foreach (string to in To)
  93. {
  94. if (string.IsNullOrEmpty(to)) continue;
  95. mailMessage.To.Add(new MailAddress(to.Trim()));
  96. }
  97. }
  98. //读取Cc 抄送者邮件地址
  99. if (Cc != null && Cc.Length > 0)
  100. {
  101. foreach (var cc in Cc)
  102. {
  103. if (string.IsNullOrEmpty(cc)) continue;
  104. mailMessage.CC.Add(new MailAddress(cc.Trim()));
  105. }
  106. }
  107. //读取Attachments 邮件附件
  108. if (Attachments != null && Attachments.Length > 0)
  109. {
  110. foreach (var attachment in Attachments)
  111. {
  112. if (string.IsNullOrEmpty(attachment)) continue;
  113. mailMessage.Attachments.Add(new Attachment(attachment));
  114. }
  115. }
  116. //读取Bcc 秘抄人地址
  117. if (Bcc != null && Bcc.Length > 0)
  118. {
  119. foreach (var bcc in Bcc)
  120. {
  121. if (string.IsNullOrEmpty(bcc)) continue;
  122. mailMessage.Bcc.Add(new MailAddress(bcc.Trim()));
  123. }
  124. }
  125. //读取From 发送人地址
  126. mailMessage.From = new MailAddress(From, FromName, Encoding);
  127. //邮件标题
  128. mailMessage.Subject = Subject;
  129. mailMessage.SubjectEncoding = Encoding;
  130. //邮件正文是否为HTML格式
  131. mailMessage.IsBodyHtml = IsBodyHtml;
  132. //邮件正文
  133. mailMessage.Body = Body;
  134. mailMessage.BodyEncoding = Encoding;
  135. //邮件优先级
  136. mailMessage.Priority = MailPriority;
  137. #endregion
  138. #region 创建smtpClient
  139. //发送邮件代码实现
  140. var smtpClient = new SmtpClient(Host,Port)
  141. {
  142. EnableSsl = true,
  143. Credentials = new NetworkCredential(UserEmail, Password),
  144. UseDefaultCredentials = false,
  145. DeliveryMethod = SmtpDeliveryMethod.Network,
  146. };
  147. ServicePointManager.ServerCertificateValidationCallback = (obj, certificate, chain, errors) => true;
  148. #endregion
  149. //发送
  150. smtpClient.Send(mailMessage);
  151. return true;
  152. }
  153. catch (Exception)
  154. {
  155. return false;
  156. }
  157. }
  158. }
  159. /// <summary>
  160. /// 发送邮件验证码
  161. /// </summary>
  162. public class EmailCodeHelper
  163. {
  164. #region 字段属性
  165. /// <summary>
  166. /// 验证码有效期(分钟)
  167. /// </summary>
  168. public int TimeOut { get; set; } = 10;
  169. /// <summary>
  170. /// 随机验证码
  171. /// </summary>
  172. public string CheckCode { get; } = new Random().Next(100000, 999999).ToString();
  173. /// <summary>
  174. /// 邮箱用户名(在RSDB文件中<email></email>配置)
  175. /// </summary>
  176. public string Email { get; set; }
  177. /// <summary>
  178. /// 邮箱用户名(在RSDB文件中<emailPassWord></emailPassWord>配置)
  179. /// </summary>
  180. public string EmailPwd { get; set; }
  181. /// <summary>
  182. /// 服务器主机名
  183. /// </summary>
  184. public string Host { get; set; }
  185. /// <summary>
  186. /// 服务器端口号
  187. /// </summary>
  188. public int Port { get; set; }
  189. /// <summary>
  190. /// 发件人邮箱地址
  191. /// </summary>
  192. public string FromMailAddressStr { get; set; } = "iwbNet@iwbNet.com";
  193. /// <summary>
  194. /// 发件人名称
  195. /// </summary>
  196. public string FromMailName { get; set; } = "玮博";
  197. /// <summary>
  198. /// 收件人地址(多个地址以“,”隔开)
  199. /// </summary>
  200. public string ToMailAddressStr { get; set; }
  201. /// <summary>
  202. /// 收件人地址数组
  203. /// </summary>
  204. private string[] ToMailAddressStrArr => ToMailAddressStr.Split(',');
  205. /// <summary>
  206. /// 邮件标题
  207. /// </summary>
  208. public string EMailSubject { get; set; } = "用户验证码(请勿回复此邮件)";
  209. /// <summary>
  210. /// 邮件内容
  211. /// </summary>
  212. public string EMailBody
  213. {
  214. get
  215. {
  216. if (string.IsNullOrEmpty(_eMailBody))
  217. _eMailBody = "亲爱的用户<br/><br/>您好,您本次验证码为:" + CheckCode + ",该验证码有效期为" + TimeOut + "分钟,切勿告诉他人。";
  218. return _eMailBody;
  219. }
  220. set { _eMailBody = value; }
  221. }
  222. private string _eMailBody;
  223. /// <summary>
  224. /// 邮件编码格式
  225. /// </summary>
  226. public Encoding Encoding { get; set; }
  227. /// <summary>
  228. /// 邮箱优先级
  229. /// </summary>
  230. public MailPriority MailPriority { get; set; }
  231. /// <summary>
  232. /// 邮件
  233. /// </summary>
  234. public EmailHelper EMailMsg { get; set; }
  235. #endregion
  236. #region 构造函数
  237. /// <summary>
  238. /// 构造函数()
  239. /// </summary>
  240. /// <param name="toMailAddressStr">收件人地址</param>
  241. /// <param name="host">服务器主机名(端口默认25)</param>
  242. public EmailCodeHelper(string toMailAddressStr, string host)
  243. {
  244. ToMailAddressStr = toMailAddressStr;
  245. Host = host;
  246. }
  247. /// <summary>
  248. /// 构造函数(重新指定服务器端口)
  249. /// </summary>
  250. /// <param name="toMailAddressStr">收件人地址</param>
  251. /// <param name="host">主机名</param>
  252. /// <param name="port">端口名,默认25</param>
  253. public EmailCodeHelper(string toMailAddressStr, string host, int port)
  254. : this(toMailAddressStr, host)
  255. {
  256. Port = port;
  257. }
  258. /// <summary>
  259. /// 构造函数重载(重写用户名,密码)
  260. /// </summary>
  261. /// <param name="toMailAddressStr">收件人地址</param>
  262. /// <param name="host">主机名</param>
  263. /// <param name="port">端口名</param>
  264. /// <param name="email">邮箱用户名</param>
  265. /// <param name="emailPwd">邮箱密码</param>
  266. public EmailCodeHelper(string toMailAddressStr, string host, int port, string email, string emailPwd)
  267. : this(toMailAddressStr, host, port)
  268. {
  269. Email = email;
  270. EmailPwd = emailPwd;
  271. }
  272. /// <summary>
  273. /// 构造函数重载(重写邮件内容、用户名,密码)
  274. /// </summary>
  275. /// <param name="toMailAddressStr">收件人地址</param>
  276. /// <param name="host">主机名</param>
  277. /// <param name="port">端口名</param>
  278. /// <param name="subject">邮件标题</param>
  279. /// <param name="body">邮件内容</param>
  280. /// <param name="fromMailAddressStr">发件人地址</param>
  281. public EmailCodeHelper(string toMailAddressStr, string host, int port, string subject, string body, string fromMailAddressStr)
  282. : this(toMailAddressStr, host, port)
  283. {
  284. EMailSubject = subject;
  285. EMailBody = body;
  286. FromMailAddressStr = fromMailAddressStr;
  287. }
  288. /// <summary>
  289. /// 构造函数重载(重写邮件内容)
  290. /// </summary>
  291. /// <param name="toMailAddressStr">收件人地址</param>
  292. /// <param name="host">主机名</param>
  293. /// <param name="port">端口名</param>
  294. /// <param name="subject">邮件标题</param>
  295. /// <param name="body">邮件内容</param>
  296. /// <param name="fromMailAddressStr">发件人地址</param>
  297. /// <param name="email">邮箱用户名</param>
  298. /// <param name="emailPwd">邮箱密码</param>
  299. public EmailCodeHelper(string toMailAddressStr, string host, int port, string subject, string body, string fromMailAddressStr, string email, string emailPwd)
  300. : this(toMailAddressStr, host, port, subject, body, fromMailAddressStr)
  301. {
  302. Email = email;
  303. EmailPwd = emailPwd;
  304. }
  305. #endregion
  306. /// <summary>
  307. /// 创建邮件
  308. /// </summary>
  309. /// <returns></returns>
  310. public EmailHelper CreateMailMsg()
  311. {
  312. return new EmailHelper()
  313. {
  314. UserEmail = Email,
  315. Password = EmailPwd,
  316. Host = Host,
  317. Port = Port,
  318. Subject = EMailSubject,
  319. Body = EMailBody,
  320. From = FromMailAddressStr,
  321. FromName = FromMailName,
  322. To = ToMailAddressStrArr,
  323. };
  324. }
  325. /// <summary>
  326. /// 发送邮件
  327. /// </summary>
  328. /// <returns></returns>
  329. public bool Send()
  330. {
  331. EMailMsg = CreateMailMsg();
  332. return EMailMsg.Send();
  333. }
  334. }
  335. }