EmailLogController.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.Extensions.Options;
  3. using ZR.Model.Dto;
  4. using ZR.Model.Models;
  5. //创建时间:2023-11-20
  6. namespace ZR.Admin.WebApi.Controllers.Email
  7. {
  8. /// <summary>
  9. /// 邮件发送记录
  10. /// </summary>
  11. [Route("system/EmailLog")]
  12. [ApiExplorerSettings(GroupName = "sys")]
  13. public class EmailLogController : BaseController
  14. {
  15. /// <summary>
  16. /// 邮件发送记录接口
  17. /// </summary>
  18. private readonly IEmailLogService _EmailLogService;
  19. private OptionsSetting OptionsSetting;
  20. public EmailLogController(
  21. IEmailLogService EmailLogService,
  22. IOptions<OptionsSetting> options)
  23. {
  24. _EmailLogService = EmailLogService;
  25. OptionsSetting = options.Value;
  26. }
  27. /// <summary>
  28. /// 查询邮件发送记录列表
  29. /// </summary>
  30. /// <param name="parm"></param>
  31. /// <returns></returns>
  32. [HttpGet("list")]
  33. [ActionPermissionFilter(Permission = "emaillog:list")]
  34. public IActionResult QueryEmailLog([FromQuery] EmailLogQueryDto parm)
  35. {
  36. var response = _EmailLogService.GetList(parm);
  37. return SUCCESS(response);
  38. }
  39. /// <summary>
  40. /// 查询邮件发送记录详情
  41. /// </summary>
  42. /// <param name="Id"></param>
  43. /// <returns></returns>
  44. [HttpGet("{Id}")]
  45. [ActionPermissionFilter(Permission = "emaillog:query")]
  46. public IActionResult GetEmailLog(long Id)
  47. {
  48. var response = _EmailLogService.GetInfo(Id);
  49. var info = response.Adapt<EmailLogDto>();
  50. return SUCCESS(info);
  51. }
  52. /// <summary>
  53. /// 批量发送邮件(从记录发送)
  54. /// </summary>
  55. /// <returns></returns>
  56. [HttpPost("sendEmail")]
  57. [ActionPermissionFilter(Permission = "tool:email:send")]
  58. [Log(Title = "批量邮件发送", BusinessType = BusinessType.INSERT)]
  59. public IActionResult SendEmail([FromBody] EmailLogDto dto)
  60. {
  61. if (dto.IdArr.Length <= 0) { return ToResponse(ApiResult.Error($"发送失败Id 不能为空")); }
  62. int count = 0;
  63. foreach (var item in dto.IdArr)
  64. {
  65. var response = _EmailLogService.GetInfo(item);
  66. MailOptions mailOptions = OptionsSetting.MailOptions.Find(x => x.FromName == response.FromName);
  67. if (mailOptions == null || string.IsNullOrEmpty(mailOptions.Password))
  68. {
  69. continue;
  70. }
  71. MailHelper mailHelper = new(mailOptions);
  72. string[] toUsers = response.ToEmails.Split(",", StringSplitOptions.RemoveEmptyEntries);
  73. string result = mailHelper.SendMail(toUsers, response.Subject, "", response.FileUrl, response.EmailContent);
  74. count += _EmailLogService.Update(x => x.Id == item, x => new EmailLog()
  75. {
  76. IsSend = 1,
  77. SendTime = DateTime.Now,
  78. SendResult = result
  79. });
  80. }
  81. return SUCCESS(count);
  82. }
  83. /// <summary>
  84. /// 删除邮件发送记录
  85. /// </summary>
  86. /// <returns></returns>
  87. [HttpDelete("{ids}")]
  88. [ActionPermissionFilter(Permission = "emaillog:delete")]
  89. [Log(Title = "邮件发送记录", BusinessType = BusinessType.DELETE)]
  90. public IActionResult DeleteEmailLog(string ids)
  91. {
  92. long[] idsArr = Tools.SpitLongArrary(ids);
  93. if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
  94. var response = _EmailLogService.Delete(idsArr);
  95. return ToResponse(response);
  96. }
  97. /// <summary>
  98. /// 发送邮件
  99. /// </summary>
  100. /// <param name="sendEmailVo">请求参数接收实体</param>
  101. /// <returns></returns>
  102. [ActionPermissionFilter(Permission = "tool:email:send")]
  103. [Log(Title = "发送邮件")]
  104. [HttpPost("/common/SendEmail")]
  105. public IActionResult SendEmail([FromBody] SendEmailDto sendEmailVo)
  106. {
  107. if (sendEmailVo == null)
  108. {
  109. return ToResponse(ApiResult.Error($"请求参数不完整"));
  110. }
  111. MailOptions mailOptions = OptionsSetting.MailOptions.Find(x => x.FromName == sendEmailVo.FromName);
  112. if (mailOptions == null || string.IsNullOrEmpty(mailOptions.Password))
  113. {
  114. return ToResponse(ApiResult.Error($"请配置邮箱信息"));
  115. }
  116. MailHelper mailHelper = new(mailOptions);
  117. string[] toUsers = sendEmailVo.ToUser.Split(",", StringSplitOptions.RemoveEmptyEntries);
  118. string result = string.Empty;
  119. if (sendEmailVo.IsSend)
  120. {
  121. result = mailHelper.SendMail(toUsers, sendEmailVo.Subject, sendEmailVo.Content, sendEmailVo.FileUrl, sendEmailVo.HtmlContent);
  122. }
  123. sendEmailVo.FromEmail = mailOptions.FromEmail;
  124. _EmailLogService.AddEmailLog(sendEmailVo, result);
  125. //logger.Info($"发送邮件{JsonConvert.SerializeObject(sendEmailVo)}, 结果{result}");
  126. return SUCCESS(result);
  127. }
  128. }
  129. }