From bbed277f8b71efc674445b5091a6aaad82189356 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Thu, 27 Aug 2026 09:59:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E5=8A=A8=E5=8F=91=E9=80=81=E9=82=AE?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/DTO/EmailNoticeConfigViewModel.cs | 36 ++++++++++++++++++ .../Common/EmailNoticeConfigService.cs | 37 +++++++++++++++++++ .../Interface/IEmailNoticeConfigService.cs | 3 +- 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs index 52407a4a6..96f1a3ece 100644 --- a/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs +++ b/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs @@ -157,6 +157,42 @@ namespace IRaCIS.Core.Application.Contracts public string EmailTopicCN { get; set; } = string.Empty; } + /// + /// 手动发送项目邮件请求参数 + /// + public class ManualSendEmailCommand + { + [NotDefault] + public Guid TrialId { get; set; } + + /// + /// 收件人邮箱列表 + /// + public List ToEmailList { get; set; } = new(); + + /// + /// 抄送人邮箱列表 + /// + public List CcEmailList { get; set; } = new(); + + public string Subject { get; set; } = string.Empty; + + /// + /// 邮件 HTML 内容 + /// + public string Content { get; set; } = string.Empty; + } + + /// + /// 邮件收件人信息 + /// + public class EmailRecipientCommand + { + public string Name { get; set; } = string.Empty; + + public string EmailAddress { get; set; } = string.Empty; + } + public class EmailNoticeConfigExportDto { diff --git a/IRaCIS.Core.Application/Service/Common/EmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Common/EmailNoticeConfigService.cs index 9722e3ad5..34fe74245 100644 --- a/IRaCIS.Core.Application/Service/Common/EmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Common/EmailNoticeConfigService.cs @@ -11,6 +11,7 @@ using MailKit.Search; using MailKit.Security; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; +using MimeKit; using System.Text.RegularExpressions; namespace IRaCIS.Core.Application.Contracts @@ -21,11 +22,47 @@ namespace IRaCIS.Core.Application.Contracts [ApiExplorerSettings(GroupName = "Common")] public class EmailNoticeConfigService(IRepository _emailNoticeConfigrepository, IRepository _emailNoticeUserTypeRepository, + IRepository _trialRepository, IOptionsMonitor systemEmailConfig, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IEmailNoticeConfigService { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; + /// + /// 根据项目邮件配置手动发送邮件 + /// + [HttpPost] + public async Task ManualSendEmail(ManualSendEmailCommand inDto) + { + var trial = await _trialRepository.Where(t => t.Id == inDto.TrialId).FirstNotNullAsync(); + + var messageToSend = new MimeMessage + { + Subject = inDto.Subject + }; + + messageToSend.From.Add(new MailboxAddress(trial.EmailFromName, trial.EmailFromEmail)); + + foreach (var recipient in inDto.ToEmailList.Where(t => !string.IsNullOrWhiteSpace(t.EmailAddress))) + { + messageToSend.To.Add(new MailboxAddress(recipient.Name, recipient.EmailAddress)); + } + + foreach (var recipient in inDto.CcEmailList.Where(t => !string.IsNullOrWhiteSpace(t.EmailAddress))) + { + messageToSend.Cc.Add(new MailboxAddress(recipient.Name, recipient.EmailAddress)); + } + + messageToSend.Body = new BodyBuilder + { + HtmlBody = inDto.Content + }.ToMessageBody(); + + await SendEmailHelper.SendTrialEmailAsync(messageToSend, trial); + + return ResponseOutput.Ok(); + } + /// /// 获取邮件列表 /// diff --git a/IRaCIS.Core.Application/Service/Common/Interface/IEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Common/Interface/IEmailNoticeConfigService.cs index eca5e5fe6..e994e76e6 100644 --- a/IRaCIS.Core.Application/Service/Common/Interface/IEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Common/Interface/IEmailNoticeConfigService.cs @@ -11,5 +11,6 @@ namespace IRaCIS.Core.Application.Contracts Task AddOrUpdateEmailNoticeConfig(EmailNoticeConfigAddOrEdit addOrEditEmailNoticeConfig); Task DeleteEmailNoticeConfig(Guid emailNoticeConfigId); Task> GetEmailNoticeConfigList(EmailNoticeConfigQuery queryEmailNoticeConfig); + Task ManualSendEmail(ManualSendEmailCommand inDto); } -} \ No newline at end of file +}