邮件内容替换
continuous-integration/drone/push Build is passing Details

Test_IRC_Net8
he 2026-05-29 09:29:43 +08:00
parent d7da7b69d4
commit 9bbac291b6
8 changed files with 83 additions and 28 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.ContentType.MediaType == "text/html")
{
// 只有这里才是真正的 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

@ -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);
}
}