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