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
+}