MailHelper.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using Host.Entity;
  2. using MimeKit;
  3. using System;
  4. using System.Security.Authentication;
  5. using System.Threading.Tasks;
  6. using Talk.Extensions;
  7. namespace Host.Common
  8. {
  9. public static class MailHelper
  10. {
  11. public static async Task<bool> SendMail(string title, string content, MailEntity mailInfo = null)
  12. {
  13. if (mailInfo == null)
  14. {
  15. mailInfo = await FileConfig.GetMailInfoAsync();
  16. if (mailInfo.MailPwd.IsNullOrWhiteSpace() ||
  17. mailInfo.MailFrom.IsNullOrWhiteSpace() ||
  18. mailInfo.MailHost.IsNullOrWhiteSpace())
  19. {
  20. throw new Exception("请先在 [/seting] 页面配置邮箱设置。");
  21. }
  22. }
  23. else
  24. {
  25. mailInfo.MailFrom = mailInfo.MailFrom.Trim();
  26. mailInfo.MailHost = mailInfo.MailHost.Trim();
  27. mailInfo.MailTo = mailInfo.MailTo.Trim();
  28. }
  29. var message = new MimeMessage();
  30. message.From.Add(new MailboxAddress(mailInfo.MailFrom, mailInfo.MailFrom));
  31. foreach (var mailTo in mailInfo.MailTo.Replace(";", ";").Replace(",", ";").Replace(",", ";").Split(';'))
  32. {
  33. message.To.Add(new MailboxAddress(mailTo, mailTo));
  34. }
  35. message.Subject = string.Format(title);
  36. message.Body = new TextPart("html")
  37. {
  38. Text = content
  39. };
  40. using (var client = new MailKit.Net.Smtp.SmtpClient())
  41. {
  42. await client.ConnectAsync(mailInfo.MailHost, 465, true);
  43. await client.AuthenticateAsync(mailInfo.MailFrom, mailInfo.MailPwd);
  44. await client.SendAsync(message);
  45. await client.DisconnectAsync(true);
  46. }
  47. return true;
  48. }
  49. public static async Task<bool> SendMail(string title, string content, string mailTo)
  50. {
  51. var info = await FileConfig.GetMailInfoAsync();
  52. if (info.MailPwd.IsNullOrWhiteSpace() || info.MailFrom.IsNullOrWhiteSpace() || info.MailHost.IsNullOrWhiteSpace())
  53. throw new Exception("请先在 [/seting] 页面配置邮箱设置。");
  54. info.MailTo = mailTo;
  55. return await SendMail(title, content, info);
  56. }
  57. }
  58. }