Merge branch 'Test_IRC_Net8' into Uat_IRC_Net8
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
he 2026-05-29 13:19:23 +08:00
commit 08d5e54fe0
9 changed files with 96 additions and 31 deletions

View File

@ -62,8 +62,15 @@ public static class SendEmailHelper
}
public static async Task<string> SendEmailAsync(MimeMessage messageToSend, Trial trial, EventHandler<MessageSentEventArgs>? messageSentSuccess = null)
/// <summary>
/// 发送项目邮件
/// </summary>
/// <param name="messageToSend"></param>
/// <param name="trial"></param>
/// <param name="messageSentSuccess"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static async Task<string> SendTrialEmailAsync(MimeMessage messageToSend, Trial trial, EventHandler<MessageSentEventArgs>? messageSentSuccess = null)
{
// 项目的需要重设 发件地址与邮件地址
@ -78,12 +85,39 @@ public static class SendEmailHelper
string result = string.Empty;
result = messageToSend.MessageId;
//没有收件人 那么不发送
if (messageToSend.To.Count == 0)
{
return string.Empty;
}
// 替换邮件标题
if (!string.IsNullOrEmpty(messageToSend.Subject))
{
foreach (var item in trial.TrialObjectNameList)
{
// 把标题里的占位符替换成真实名称
messageToSend.Subject = messageToSend.Subject.Replace(item.Name, item.TrialName);
}
}
// 构建替换字典
var replacements = new Dictionary<string, string>();
foreach (var item in trial.TrialObjectNameList)
{
replacements[item.Name] = item.TrialName;
}
// 安全替换 HTML
ReplaceHtmlContent(messageToSend.Body, replacements);
try
{
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
@ -128,6 +162,27 @@ public static class SendEmailHelper
return result;
}
// 遍历邮件体,找到 HTML 部分并替换
public static void ReplaceHtmlContent(MimeEntity entity, Dictionary<string, string> replacements)
{
if (entity is Multipart multipart)
{
foreach (var part in multipart)
{
ReplaceHtmlContent(part, replacements);
}
}
else if (entity is TextPart textPart && textPart.IsHtml)
{
// 只有这里才是真正的 HTML
foreach (var kv in replacements)
{
textPart.Text = textPart.Text.Replace(kv.Key, kv.Value);
}
}
}
public static async Task<bool> TestEmailConfigAsync(SystemEmailSendConfig _systemEmailConfig)
{
using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))

View File

@ -16319,6 +16319,16 @@
<param name="email"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Helper.SendEmailHelper.SendTrialEmailAsync(MimeKit.MimeMessage,IRaCIS.Core.Domain.Models.Trial,System.EventHandler{MailKit.MessageSentEventArgs})">
<summary>
发送项目邮件
</summary>
<param name="messageToSend"></param>
<param name="trial"></param>
<param name="messageSentSuccess"></param>
<returns></returns>
<exception cref="T:System.Exception"></exception>
</member>
<member name="M:IRaCIS.Core.Application.Helper.FileConvertHelper.ConvertWordToPdf(System.String,System.String)">
<summary>
镜像里面打入libreoffice 的方案
@ -17484,17 +17494,17 @@
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Question">
<summary>
质疑
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
</summary>
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Consistency">
<summary>
一致性核查
һ<EFBFBD><EFBFBD><EFBFBD>Ժ˲<EFBFBD>
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.CopyFrontAuditConfigItemDto">
<summary>
复制
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.SystemNoticeView">

View File

@ -397,7 +397,7 @@ public class ImageConsumer(
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(inDto.EmailNoticeConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
@ -547,7 +547,7 @@ public class ImageConsumer(
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailNoticeConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
}

View File

@ -130,7 +130,7 @@ public class UrgentMedicalReviewAddedEventConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
@ -240,7 +240,7 @@ public class UrgentIRRepliedMedicalReviewConsumer(
};
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
@ -360,7 +360,7 @@ public class UrgentMIMRepliedMedicalReviewConsumer(
};
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
}
@ -484,7 +484,7 @@ public class UrgentIRApplyedReReadingConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}

View File

@ -134,7 +134,7 @@ public class UserSiteSurveySubmitedEventConsumer(
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
@ -227,7 +227,7 @@ public class SiteSurveySPMSubmitedEventConsumer(
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
@ -357,7 +357,7 @@ public class SiteSurverRejectedEventConsumer(
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}

View File

@ -128,7 +128,7 @@ public class CRCSubmitedAndQCToAuditEventConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
@ -235,7 +235,7 @@ public class CRCRepliedQCChallengeEventConsumer(
};
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
}
@ -360,7 +360,7 @@ public class QCRepliedQCChallengeEventConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
@ -472,7 +472,7 @@ public class CRCRepliedCheckChallengeEventConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
@ -607,7 +607,7 @@ public class PMRepliedCheckChallengeEventConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
@ -715,7 +715,7 @@ public class CheckStateChangedToAuditEventConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
@ -833,7 +833,7 @@ public class QCClaimTaskEventConsumer(
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}
}

View File

@ -173,7 +173,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
//处理标记已通知的任务

View File

@ -167,7 +167,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
};
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
catch (Exception)
@ -341,7 +341,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
continue;
}
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
msg += "发送成功";
}

View File

@ -334,7 +334,7 @@ namespace IRaCIS.Core.Application.Service
var sucessHandle = GetEmailSuccessHandle(Guid.Empty, verificationCode, emailAddress);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo, sucessHandle);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo, sucessHandle);
}
@ -578,7 +578,7 @@ namespace IRaCIS.Core.Application.Service
await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
@ -639,7 +639,7 @@ namespace IRaCIS.Core.Application.Service
await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
@ -779,7 +779,7 @@ namespace IRaCIS.Core.Application.Service
await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.DoctorUserFirstJoinTrial : EmailBusinessScenario.DoctorUserExistJoinTrial, messageToSend, emailConfigFunc,workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo, null);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo, null);
//创建账号 和创建角色 一条,更新的时候才记录更新角色
if (isNeedCreateNewUser == false)
@ -951,7 +951,7 @@ namespace IRaCIS.Core.Application.Service
}
else
{
await SendEmailHelper.SendEmailAsync(messageToSend, trialinfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialinfo);
}
@ -1031,7 +1031,7 @@ namespace IRaCIS.Core.Application.Service
await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurvey_CheckUser, messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
public async Task SiteSuervyUpdateUser(Guid trialSiteId, string email, string name, string url)
@ -1073,7 +1073,7 @@ namespace IRaCIS.Core.Application.Service
await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurvey_UpdateUser, messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
await SendEmailHelper.SendTrialEmailAsync(messageToSend, trialInfo);
}
}