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