Skip to content

Commit de143b0

Browse files
committed
✨新增邮件发送日志
1 parent e881278 commit de143b0

File tree

19 files changed

+357
-767
lines changed

19 files changed

+357
-767
lines changed

Infrastructure/Model/SendEmailDto.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,9 @@ public class SendEmailDto
2323
/// </summary>
2424
public bool SendMe { get; set; }
2525
public DateTime AddTime { get; set; }
26+
/// <summary>
27+
/// 是否发送
28+
/// </summary>
29+
public bool IsSend { get; set; }
2630
}
2731
}

ZR.Admin.WebApi/Controllers/CommonController.cs

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Microsoft.AspNetCore.Mvc;
22
using Microsoft.Extensions.Options;
3-
using Newtonsoft.Json;
43
using ZR.Admin.WebApi.Filters;
54
using ZR.Model.System;
65
using ZR.Service.IService;
@@ -75,39 +74,6 @@ public IActionResult SendMsg(string msg, string toUser = "")
7574
return SUCCESS(msg);
7675
}
7776

78-
/// <summary>
79-
/// 发送邮件
80-
/// </summary>
81-
/// <param name="sendEmailVo">请求参数接收实体</param>
82-
/// <returns></returns>
83-
[ActionPermissionFilter(Permission = "tool:email:send")]
84-
[Log(Title = "发送邮件")]
85-
[HttpPost]
86-
public IActionResult SendEmail([FromBody] SendEmailDto sendEmailVo)
87-
{
88-
if (sendEmailVo == null)
89-
{
90-
return ToResponse(ApiResult.Error($"请求参数不完整"));
91-
}
92-
if (string.IsNullOrEmpty(OptionsSetting.MailOptions.FromEmail) || string.IsNullOrEmpty(OptionsSetting.MailOptions.Password))
93-
{
94-
return ToResponse(ApiResult.Error($"请配置邮箱信息"));
95-
}
96-
97-
MailHelper mailHelper = new();
98-
99-
string[] toUsers = sendEmailVo.ToUser.Split(",", StringSplitOptions.RemoveEmptyEntries);
100-
if (sendEmailVo.SendMe)
101-
{
102-
toUsers.Append(mailHelper.FromEmail);
103-
}
104-
string result = mailHelper.SendMail(toUsers, sendEmailVo.Subject, sendEmailVo.Content, sendEmailVo.FileUrl, sendEmailVo.HtmlContent);
105-
106-
logger.Info($"发送邮件{JsonConvert.SerializeObject(sendEmailVo)}, 结果{result}");
107-
108-
return SUCCESS(result);
109-
}
110-
11177
#region 上传
11278

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

ZR.Admin.WebApi/Controllers/System/EmailTplController.cs renamed to ZR.Admin.WebApi/Controllers/Email/EmailTplController.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
using ZR.ServiceCore.Model;
66

77
//创建时间:2023-11-12
8-
namespace ZR.Admin.WebApi.Controllers
8+
namespace ZR.Admin.WebApi.Controllers.Email
99
{
1010
/// <summary>
1111
/// 邮件模板
1212
/// </summary>
1313
[Verify]
1414
[Route("system/EmailTpl")]
15+
[ApiExplorerSettings(GroupName = "sys")]
1516
public class EmailTplController : BaseController
1617
{
1718
/// <summary>
@@ -37,7 +38,6 @@ public IActionResult QueryEmailTpl([FromQuery] EmailTplQueryDto parm)
3738
return SUCCESS(response);
3839
}
3940

40-
4141
/// <summary>
4242
/// 查询邮件模板详情
4343
/// </summary>
@@ -47,7 +47,7 @@ public IActionResult QueryEmailTpl([FromQuery] EmailTplQueryDto parm)
4747
public IActionResult GetEmailTpl(int Id)
4848
{
4949
var response = _EmailTplService.GetInfo(Id);
50-
50+
5151
var info = response.Adapt<EmailTpl>();
5252
return SUCCESS(info);
5353
}

ZR.Admin.WebApi/wwwroot/data.xlsx

318 Bytes
Binary file not shown.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace ZR.Model.Dto
4+
{
5+
/// <summary>
6+
/// 邮件发送记录查询对象
7+
/// </summary>
8+
public class EmailLogQueryDto : PagerInfo
9+
{
10+
public string FromEmail { get; set; }
11+
public string Subject { get; set; }
12+
public DateTime? BeginAddTime { get; set; }
13+
public DateTime? EndAddTime { get; set; }
14+
}
15+
16+
/// <summary>
17+
/// 邮件发送记录输入输出对象
18+
/// </summary>
19+
public class EmailLogDto
20+
{
21+
//[Required(ErrorMessage = "Id不能为空")]
22+
[JsonConverter(typeof(ValueToStringConverter))]
23+
public long Id { get; set; }
24+
25+
public string FromEmail { get; set; }
26+
27+
public string Subject { get; set; }
28+
29+
public string ToEmails { get; set; }
30+
31+
public string EmailContent { get; set; }
32+
33+
public DateTime? AddTime { get; set; }
34+
/// <summary>
35+
/// 是否已发送
36+
/// </summary>
37+
public int IsSend { get; set; }
38+
/// <summary>
39+
/// 发送结果
40+
/// </summary>
41+
public string SendResult { get; set; }
42+
public long[] IdArr { get; set; }
43+
}
44+
}

ZR.ServiceCore/Model/EmailLog.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
namespace ZR.ServiceCore.Model
2+
{
3+
/// <summary>
4+
/// 邮件发送记录
5+
/// </summary>
6+
[SugarTable("email_log")]
7+
public class EmailLog
8+
{
9+
[JsonConverter(typeof(ValueToStringConverter))]
10+
[SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
11+
public long Id { get; set; }
12+
/// <summary>
13+
/// 发送邮箱
14+
/// </summary>
15+
public string FromEmail { get; set; }
16+
/// <summary>
17+
/// 邮件主题
18+
/// </summary>
19+
public string Subject { get; set; }
20+
/// <summary>
21+
/// 接收邮箱
22+
/// </summary>
23+
[SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)]
24+
public string ToEmails{ get; set; }
25+
/// <summary>
26+
/// 邮件内容
27+
/// </summary>
28+
[SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)]
29+
public string EmailContent { get; set; }
30+
/// <summary>
31+
/// 发送时间
32+
/// </summary>
33+
public DateTime AddTime { get; set; } = DateTime.Now;
34+
/// <summary>
35+
/// 是否已发送
36+
/// </summary>
37+
public int IsSend { get; set; }
38+
/// <summary>
39+
/// 发送结果
40+
/// </summary>
41+
public string SendResult { get; set; }
42+
/// <summary>
43+
/// 附件地址
44+
/// </summary>
45+
public string FileUrl { get; set; }
46+
/// <summary>
47+
/// 发送时间
48+
/// </summary>
49+
public DateTime SendTime { get; set; }
50+
}
51+
}

ZR.ServiceCore/Model/SysMenu.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public class SysMenu : SysBase
4444
public string Component { get; set; }
4545

4646
/// <summary>
47-
/// 是否缓存(1缓存 0不缓存
47+
/// 是否缓存(1不缓存 0缓存
4848
/// </summary>
4949
[SugarColumn(DefaultValue = "0", ColumnDataType = "int")]
50-
public string IsCache { get; set; }
50+
public string IsCache { get; set; } = "0";
5151
/// <summary>
5252
/// 是否外链 1、是 0、否
5353
/// </summary>

0 commit comments

Comments
 (0)