手动发送邮件
continuous-integration/drone/push Build is running

This commit is contained in:
he
2026-08-27 09:59:34 +08:00
parent e2a84e0dd7
commit bbed277f8b
3 changed files with 75 additions and 1 deletions
@@ -157,6 +157,42 @@ namespace IRaCIS.Core.Application.Contracts
public string EmailTopicCN { get; set; } = string.Empty;
}
/// <summary>
/// 手动发送项目邮件请求参数
/// </summary>
public class ManualSendEmailCommand
{
[NotDefault]
public Guid TrialId { get; set; }
/// <summary>
/// 收件人邮箱列表
/// </summary>
public List<EmailRecipientCommand> ToEmailList { get; set; } = new();
/// <summary>
/// 抄送人邮箱列表
/// </summary>
public List<EmailRecipientCommand> CcEmailList { get; set; } = new();
public string Subject { get; set; } = string.Empty;
/// <summary>
/// 邮件 HTML 内容
/// </summary>
public string Content { get; set; } = string.Empty;
}
/// <summary>
/// 邮件收件人信息
/// </summary>
public class EmailRecipientCommand
{
public string Name { get; set; } = string.Empty;
public string EmailAddress { get; set; } = string.Empty;
}
public class EmailNoticeConfigExportDto
{
@@ -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<EmailNoticeConfig> _emailNoticeConfigrepository,
IRepository<EmailNoticeUserType> _emailNoticeUserTypeRepository,
IRepository<Trial> _trialRepository,
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IEmailNoticeConfigService
{
private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
/// <summary>
/// 根据项目邮件配置手动发送邮件
/// </summary>
[HttpPost]
public async Task<IResponseOutput> 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();
}
/// <summary>
/// 获取邮件列表
/// </summary>
@@ -11,5 +11,6 @@ namespace IRaCIS.Core.Application.Contracts
Task<IResponseOutput> AddOrUpdateEmailNoticeConfig(EmailNoticeConfigAddOrEdit addOrEditEmailNoticeConfig);
Task<IResponseOutput> DeleteEmailNoticeConfig(Guid emailNoticeConfigId);
Task<PageOutput<EmailNoticeConfigView>> GetEmailNoticeConfigList(EmailNoticeConfigQuery queryEmailNoticeConfig);
Task<IResponseOutput> ManualSendEmail(ManualSendEmailCommand inDto);
}
}
}