From 97d9aefbeb2bd688a2ea2c4be2a8021ac52b1b0b Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Fri, 5 Dec 2025 14:54:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=82=AE=E4=BB=B6=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E9=A1=B9=E7=9B=AE=E7=9A=84=E5=8F=91=E4=BB=B6=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helper/Email/SendEmailHelper.cs | 68 +++++++++++++++++-- .../MassTransit/Consumer/ImageConsumer.cs | 6 +- .../Consumer/ReadingRelationEmailConsumer.cs | 15 ++-- .../Consumer/SiteSurverEmailConsumer.cs | 12 ++-- .../SubjectVisitQCAndCheckConsumer.cs | 28 ++++---- .../Recurring/IRRecurringConsumer.cs | 4 +- .../Recurring/TrialDocumentConsumer.cs | 11 ++- .../Service/Common/MailService.cs | 24 +++---- .../Document/DTO/SystemDocumentViewModel.cs | 1 + 9 files changed, 111 insertions(+), 58 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/Email/SendEmailHelper.cs b/IRaCIS.Core.Application/Helper/Email/SendEmailHelper.cs index c8f0fe9f0..488333c0e 100644 --- a/IRaCIS.Core.Application/Helper/Email/SendEmailHelper.cs +++ b/IRaCIS.Core.Application/Helper/Email/SendEmailHelper.cs @@ -2,6 +2,7 @@ using MailKit; using MailKit.Security; using MimeKit; +using Org.BouncyCastle.Tls; namespace IRaCIS.Core.Application.Helper; @@ -60,20 +61,73 @@ public static class SendEmailHelper } - /// - /// 设置发送邮箱 - /// - /// - /// - public static void ChangeEmailSenderName(MimeMessage messageToSend, string senderName) + + + public static async Task SendEmailAsync(MimeMessage messageToSend, Trial trial, EventHandler? messageSentSuccess = null) { + + // 项目的需要重设 发件地址与邮件地址 var fromAddress = messageToSend.From.Mailboxes.FirstOrDefault(); if (fromAddress != null) { messageToSend.From.Clear(); - messageToSend.From.Add(new MailboxAddress(senderName, fromAddress.Address)); + messageToSend.From.Add(new MailboxAddress(trial.EmailFromName, trial.EmailSMTPServerAddress)); } + + + string result = string.Empty; + result = messageToSend.MessageId; + + //没有收件人 那么不发送 + if (messageToSend.To.Count == 0) + { + return string.Empty; + } + + try + { + using (var smtp = new MailKit.Net.Smtp.SmtpClient()) + { + if (messageSentSuccess != null) + { + smtp.MessageSent += messageSentSuccess; + } + + + smtp.ServerCertificateValidationCallback = (s, c, h, e) => true; + + //await smtp.ConnectAsync("smtp.qq.com", 465, SecureSocketOptions.SslOnConnect); + + //await smtp.AuthenticateAsync("zhou941003@qq.com", "sqfhlpfdvnexbcab"); + + + //await smtp.ConnectAsync(_systemEmailConfig.Host, _systemEmailConfig.Port, SecureSocketOptions.Auto); + + //await smtp.AuthenticateAsync(_systemEmailConfig.FromEmail, _systemEmailConfig.AuthorizationCode); + + + await smtp.ConnectAsync(trial.EmailSMTPServerAddress, trial.EmailSMTPServerPort, SecureSocketOptions.Auto); + + await smtp.AuthenticateAsync(trial.EmailFromEmail, trial.EmailAuthorizationCode); + + + await smtp.SendAsync(messageToSend); + + await smtp.DisconnectAsync(true); + + + } + } + catch (Exception ex) + { + + //---邮件发送失败,您进行的操作未能成功,请检查邮箱或联系维护人员 + throw new Exception(I18n.T("SendEmail_SendFail"), new Exception(ex.Message)); + } + + return result; } + public static async Task TestEmailConfigAsync(SystemEmailSendConfig _systemEmailConfig) { using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5))) diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs index 49b5858ed..5ba0dafcc 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs @@ -369,8 +369,7 @@ public class ImageConsumer( await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(inDto.EmailNoticeConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } @@ -503,8 +502,7 @@ public class ImageConsumer( await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailNoticeConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs index 6cb2eb004..9d63d36a5 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs @@ -127,8 +127,8 @@ public class UrgentMedicalReviewAddedEventConsumer( }; await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } @@ -235,8 +235,8 @@ public class UrgentIRRepliedMedicalReviewConsumer( return (topicStr, htmlBodyStr); }; await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } @@ -353,8 +353,7 @@ public class UrgentMIMRepliedMedicalReviewConsumer( }; await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } @@ -462,8 +461,8 @@ public class UrgentIRApplyedReReadingConsumer( }; await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs index 901dea4e5..302f5aabc 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs @@ -121,8 +121,8 @@ public class UserSiteSurveySubmitedEventConsumer( await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } @@ -204,8 +204,8 @@ public class SiteSurveySPMSubmitedEventConsumer( }; await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } @@ -318,8 +318,8 @@ public class SiteSurverRejectedEventConsumer( }; await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs index 923dbfe44..52ab6b2d9 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs @@ -121,8 +121,8 @@ public class CRCSubmitedAndQCToAuditEventConsumer( }; await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } @@ -220,8 +220,8 @@ public class CRCRepliedQCChallengeEventConsumer( return (topicStr, htmlBodyStr); }; await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } @@ -338,8 +338,8 @@ public class QCRepliedQCChallengeEventConsumer( await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } @@ -438,8 +438,8 @@ public class CRCRepliedCheckChallengeEventConsumer( await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } @@ -548,8 +548,8 @@ public class PMRepliedCheckChallengeEventConsumer( await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } @@ -647,8 +647,8 @@ public class CheckStateChangedToAuditEventConsumer( await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } @@ -756,8 +756,8 @@ public class QCClaimTaskEventConsumer( await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } } diff --git a/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs b/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs index 087524fcd..5cd6d0064 100644 --- a/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs @@ -163,8 +163,8 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring }; await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); //处理标记已通知的任务 diff --git a/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs b/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs index c0633d855..71dc38aa2 100644 --- a/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs @@ -14,6 +14,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Linq.Dynamic.Core; using System.Reactive.Joins; using System.Text; using System.Text.RegularExpressions; @@ -199,6 +200,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring { IsSystemDoc = true, Id = trialDoc.Id, + TrialId= trialDoc.TrialId, CreateTime = trialDoc.CreateTime, IsDeleted = trialDoc.IsDeleted, SignViewMinimumMinutes = trialDoc.SignViewMinimumMinutes, @@ -231,7 +233,8 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring { IsSystemDoc = false, Id = trialDoc.Id, - EmailFromName=trial.EmailFromName, + TrialId = trialDoc.TrialId, + EmailFromName =trial.EmailFromName, CreateTime = trialDoc.CreateTime, IsDeleted = trialDoc.IsDeleted, SignViewMinimumMinutes = trialDoc.SignViewMinimumMinutes, @@ -290,8 +293,10 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring var trial = datalist.Where(x => x.ConfirmUserId == userinfo.Id).FirstOrDefault(); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trial.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + var trialInfo = await _trialRepository.Where(x=>x.Id==trial.TrialId).FirstNotNullAsync(); + + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); msg += "发送成功"; } diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs index cf47d58c5..cc3caed14 100644 --- a/IRaCIS.Core.Application/Service/Common/MailService.cs +++ b/IRaCIS.Core.Application/Service/Common/MailService.cs @@ -533,8 +533,7 @@ namespace IRaCIS.Core.Application.Service await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, null); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo, null); } @@ -593,8 +592,7 @@ namespace IRaCIS.Core.Application.Service await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } @@ -723,8 +721,7 @@ namespace IRaCIS.Core.Application.Service await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.DoctorUserFirstJoinTrial : EmailBusinessScenario.DoctorUserExistJoinTrial, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, null); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo, null); //创建账号 和创建角色 一条,更新的时候才记录更新角色 if (isNeedCreateNewUser == false) @@ -926,7 +923,7 @@ namespace IRaCIS.Core.Application.Service //中心调研核对人员提醒 public async Task SiteSuervyCheckUser(Guid trialId, string email, string name) { - var trialInfo = await _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.TrialCode, t.EmailFromName, t.ResearchProgramNo }).FirstOrDefaultAsync(); + var trialInfo = await _trialRepository.Where(t => t.Id == trialId).FirstOrDefaultAsync(); var messageToSend = new MimeMessage(); //发件地址 @@ -954,14 +951,14 @@ namespace IRaCIS.Core.Application.Service await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurvey_CheckUser, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } public async Task SiteSuervyUpdateUser(Guid trialSiteId, string email, string name, string url) { - var trialInfo = await _trialSiteRepository.Where(t => t.Id == trialSiteId).Select(t => new { t.Trial.TrialCode, t.Trial.EmailFromName, t.Trial.ResearchProgramNo, t.TrialSiteCode, t.TrialSiteName, t.TrialSiteAliasName }).FirstOrDefaultAsync(); + var siteInfo = await _trialSiteRepository.Where(t => t.Id == trialSiteId).Include(x=>x.Trial).FirstOrDefaultAsync(); + var trialInfo = siteInfo.Trial; var messageToSend = new MimeMessage(); //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); @@ -980,8 +977,8 @@ namespace IRaCIS.Core.Application.Service var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr), name, trialInfo.TrialCode, - trialInfo.TrialSiteCode, - trialInfo.TrialSiteName, + siteInfo.TrialSiteCode, + siteInfo.TrialSiteName, url ); @@ -990,8 +987,7 @@ namespace IRaCIS.Core.Application.Service await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurvey_UpdateUser, messageToSend, emailConfigFunc); - SendEmailHelper.ChangeEmailSenderName(messageToSend, trialInfo.EmailFromName); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } diff --git a/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs index e4a1da67c..a0b89b912 100644 --- a/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs +++ b/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs @@ -92,6 +92,7 @@ namespace IRaCIS.Core.Application.Contracts public class UnionDocumentWithConfirmInfoView : UnionDocumentView { + public Guid TrialId { get; set; } public bool IsNeedSendEmial { get; set; } public DateTime UserCreateTime { get; set; }