|
|
|
@ -9,6 +9,15 @@ using IRaCIS.Application.Contracts;
|
|
|
|
|
using Microsoft.Extensions.Options;
|
|
|
|
|
using Medallion.Threading;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using IRaCIS.Core.Infrastructure;
|
|
|
|
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
|
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
|
|
|
|
using NPOI.SS.Formula.Functions;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
|
|
|
|
using IRaCIS.Core.Domain.Models;
|
|
|
|
|
using DocumentFormat.OpenXml.Office2013.Excel;
|
|
|
|
|
using IRaCIS.Core.Application.Contracts;
|
|
|
|
|
using DocumentFormat.OpenXml.Vml;
|
|
|
|
|
|
|
|
|
|
namespace IRaCIS.Application.Services
|
|
|
|
|
{
|
|
|
|
@ -19,7 +28,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
|
|
|
|
|
Task SendEmailVerification(string emailAddress, int verificationCode);
|
|
|
|
|
|
|
|
|
|
Task SiteSurveyRejectEmail(MimeMessage messageToSend);
|
|
|
|
|
Task SiteSurveyRejectEmail(MimeMessage messageToSend, TrialSiteSurvey trialSiteSurvey, string routeUrl, User? user = null);
|
|
|
|
|
|
|
|
|
|
Task SenMFAVerifyEmail(Guid userId, string userName, string emailAddress, int verificationCode, UserMFAType mfaType = UserMFAType.Login);
|
|
|
|
|
|
|
|
|
@ -40,7 +49,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class MailVerificationService : BaseService, IMailVerificationService
|
|
|
|
|
public class MailVerificationService : BaseService, IMailVerificationService
|
|
|
|
|
{
|
|
|
|
|
private readonly IRepository<VerificationCode> _verificationCodeRepository;
|
|
|
|
|
|
|
|
|
@ -59,15 +68,16 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
|
|
|
|
|
private readonly SystemEmailSendConfig _systemEmailConfig;
|
|
|
|
|
|
|
|
|
|
private readonly IRepository<EmailNoticeConfig> _emailNoticeConfigrepository;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public MailVerificationService(IRepository<VerificationCode> verificationCodeRepository,
|
|
|
|
|
public MailVerificationService(IRepository<VerificationCode> verificationCodeRepository,
|
|
|
|
|
IRepository<SystemBasicData> systemBasicDatarepository,
|
|
|
|
|
IRepository<User> userRepository,
|
|
|
|
|
ITokenService tokenService,
|
|
|
|
|
IRepository<Trial> trialRepository,
|
|
|
|
|
IRepository<UserType> userTypeRepository,
|
|
|
|
|
IRepository<Doctor> doctorTypeRepository,
|
|
|
|
|
IRepository<EmailNoticeConfig> emailNoticeConfigRepository,
|
|
|
|
|
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig, IDistributedLockProvider distributedLockProvider)
|
|
|
|
|
{
|
|
|
|
|
_systemEmailConfig = systemEmailConfig.CurrentValue;
|
|
|
|
@ -80,16 +90,73 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
_userTypeRepository = userTypeRepository;
|
|
|
|
|
_doctorTypeRepository = doctorTypeRepository;
|
|
|
|
|
_distributedLockProvider = distributedLockProvider;
|
|
|
|
|
|
|
|
|
|
_emailNoticeConfigrepository = emailNoticeConfigRepository;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private async Task<MimeMessage> GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario scenario, MimeMessage messageToSend,
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc)
|
|
|
|
|
{
|
|
|
|
|
var configInfo = await _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario).FirstOrDefaultAsync();
|
|
|
|
|
|
|
|
|
|
if (configInfo == null)
|
|
|
|
|
{
|
|
|
|
|
throw new BusinessValidationFailedException("系统未找到当前场景邮件配置信息,请联系运维人员核查");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var (topicStr, htmlBodyStr) = _userInfo.IsEn_Us ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//每个场景修改主题 和body的逻辑不一样
|
|
|
|
|
(topicStr, htmlBodyStr) = emailFunc((topicStr, htmlBodyStr));
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
throw new BusinessValidationFailedException("邮件模板内容有误,填充内容出现问题,请联系运维人员核查");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend.Subject = topicStr;
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = htmlBodyStr;
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
|
|
|
|
|
return messageToSend;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private EventHandler<MessageSentEventArgs> GetEmailSuccessHandle(Guid userId, int verificationCode, string email = "")
|
|
|
|
|
{
|
|
|
|
|
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
// args.Response
|
|
|
|
|
var code = verificationCode.ToString();
|
|
|
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
|
|
|
{
|
|
|
|
|
CodeType = VerifyType.Email,
|
|
|
|
|
HasSend = true,
|
|
|
|
|
Code = code,
|
|
|
|
|
UserId = userId,
|
|
|
|
|
EmailOrPhone = email,
|
|
|
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
|
|
|
}).Result;
|
|
|
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return sucessHandle;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string ReplaceCompanyName(string needDealtxt)
|
|
|
|
|
{
|
|
|
|
|
var str= needDealtxt.Replace("{company}", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyName : _systemEmailConfig.CompanyNameCN)
|
|
|
|
|
var str = needDealtxt.Replace("{company}", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyName : _systemEmailConfig.CompanyNameCN)
|
|
|
|
|
.Replace("{company abbreviation}", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN);
|
|
|
|
|
|
|
|
|
|
return str;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -101,120 +168,68 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
|
|
|
|
//收件地址
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(userName, emailAddress));
|
|
|
|
|
//主题
|
|
|
|
|
//---[来自{0}] 关于MFA邮箱验证的提醒
|
|
|
|
|
messageToSend.Subject = _localizer[mfaType == UserMFAType.Login? "Mail_EmailMFALoginTopic":"Mail_EmailMFAUnlockTopic", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN];
|
|
|
|
|
//主题---[来自{0}] 关于MFA邮箱验证的提醒
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
//+ "UserOptCommon.html";
|
|
|
|
|
+ (_userInfo.IsEn_Us ? "UserOptCommon_US.html" : "UserOptCommon.html");
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
userName,
|
|
|
|
|
_localizer[mfaType == UserMFAType.Login ? "Mail_EmailMFALoginEmail": "Mail_EmailMFAUnlockEmail"],
|
|
|
|
|
_localizer[mfaType == UserMFAType.Login ? "Mail_EmailMFALoginEmail" : "Mail_EmailMFAUnlockEmail"],
|
|
|
|
|
verificationCode
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
// args.Response
|
|
|
|
|
var code = verificationCode.ToString();
|
|
|
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
|
|
|
{
|
|
|
|
|
CodeType = 0,
|
|
|
|
|
HasSend = true,
|
|
|
|
|
Code = code,
|
|
|
|
|
UserId = userId,
|
|
|
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
|
|
|
}).Result;
|
|
|
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
|
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(mfaType == UserMFAType.Login ? EmailBusinessScenario.MFALogin : EmailBusinessScenario.MFAUnlock, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var sucessHandle = GetEmailSuccessHandle(userId, verificationCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, sucessHandle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//重置邮箱
|
|
|
|
|
//用户重置邮箱
|
|
|
|
|
public async Task SendMailEditEmail(Guid userId, string userName, string emailAddress, int verificationCode)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var messageToSend = new MimeMessage();
|
|
|
|
|
//发件地址
|
|
|
|
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
|
|
|
|
//收件地址
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(userName, emailAddress));
|
|
|
|
|
//主题
|
|
|
|
|
//---[来自展影IRC] 关于重置邮箱的提醒
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_EmailResetReminder", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN];
|
|
|
|
|
//---[来自展影IRC] 关于重置邮箱的提醒
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
//+ "UserOptCommon.html";
|
|
|
|
|
+(_userInfo.IsEn_Us ? "UserOptCommon_US.html" : "UserOptCommon.html");
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
userName,
|
|
|
|
|
//---尊敬的
|
|
|
|
|
//_localizer["Mail_Dear", userName],
|
|
|
|
|
//---您正在进行邮箱重置操作
|
|
|
|
|
//---您正在进行邮箱重置操作
|
|
|
|
|
_localizer["Mail_ResettingEmail"],
|
|
|
|
|
verificationCode
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.UserResetEmail, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
// args.Response
|
|
|
|
|
var code = verificationCode.ToString();
|
|
|
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
|
|
|
{
|
|
|
|
|
CodeType = 0,
|
|
|
|
|
HasSend = true,
|
|
|
|
|
Code = code,
|
|
|
|
|
UserId = userId,
|
|
|
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
|
|
|
}).Result;
|
|
|
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var sucessHandle = GetEmailSuccessHandle(userId, verificationCode);
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, sucessHandle);
|
|
|
|
|
|
|
|
|
@ -231,61 +246,37 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
|
|
|
|
//收件地址
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
|
|
|
|
|
//主题
|
|
|
|
|
//---[来自展影IRC] 关于重置密码的提醒
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_IRCResettingPassword", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
//+ "UserOptCommon.html";
|
|
|
|
|
+ (_userInfo.IsEn_Us ? "UserOptCommon_US.html" : "UserOptCommon.html");
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName);
|
|
|
|
|
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
"",
|
|
|
|
|
"",
|
|
|
|
|
//---您正在进行邮箱重置密码操作
|
|
|
|
|
_localizer["Mail_ResettingPassword"],
|
|
|
|
|
verificationCode
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.UnloginUseEmailResetPassword, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
var code = verificationCode.ToString();
|
|
|
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
|
|
|
{
|
|
|
|
|
CodeType = Core.Domain.Share.VerifyType.Email,
|
|
|
|
|
HasSend = true,
|
|
|
|
|
Code = code,
|
|
|
|
|
UserId = Guid.Empty,//此时不知道用户
|
|
|
|
|
EmailOrPhone = emailAddress,
|
|
|
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
|
|
|
}).Result;
|
|
|
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
////此时不知道用户
|
|
|
|
|
var sucessHandle = GetEmailSuccessHandle(Guid.Empty, verificationCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, sucessHandle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 发送验证码
|
|
|
|
|
/// Reviewer简历录入 发送验证码
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="emailAddress"></param>
|
|
|
|
|
/// <param name="verificationCode"></param>
|
|
|
|
@ -293,61 +284,37 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
public async Task SendEmailVerification(string emailAddress, int verificationCode)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var messageToSend = new MimeMessage();
|
|
|
|
|
//发件地址
|
|
|
|
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
|
|
|
|
//收件地址
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
|
|
|
|
|
//主题
|
|
|
|
|
//---[来自展影IRC]的提醒
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_ImagingIRCReminder", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN];
|
|
|
|
|
//---[来自展影IRC]的提醒
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ (_userInfo.IsEn_Us ? "UserOptCommon_US.html": "UserOptCommon.html" );
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName);
|
|
|
|
|
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
"Sir or Madam",
|
|
|
|
|
"Sir or Madam",
|
|
|
|
|
//---您正在参与展影医疗IRC项目
|
|
|
|
|
_localizer["Mail_IRCProject", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN],
|
|
|
|
|
_localizer["Mail_IRCProject", companyName],
|
|
|
|
|
verificationCode
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
// args.Response
|
|
|
|
|
var code = verificationCode.ToString();
|
|
|
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
|
|
|
{
|
|
|
|
|
CodeType = VerifyType.Email,
|
|
|
|
|
HasSend = true,
|
|
|
|
|
Code = code,
|
|
|
|
|
UserId = Guid.Empty,//此时不知道用户
|
|
|
|
|
EmailOrPhone = emailAddress,
|
|
|
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
|
|
|
}).Result;
|
|
|
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.UnloginUseEmailResetPassword, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
//此时不知道用户
|
|
|
|
|
var sucessHandle = GetEmailSuccessHandle(Guid.Empty, verificationCode, emailAddress);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, sucessHandle);
|
|
|
|
|
|
|
|
|
@ -359,7 +326,6 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
public async Task AnolymousSendEmail(string researchProgramNo, string emailAddress, int verificationCode)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var messageToSend = new MimeMessage();
|
|
|
|
|
//发件地址
|
|
|
|
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
|
|
|
@ -367,67 +333,74 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
|
|
|
|
|
//主题
|
|
|
|
|
//$"[来自展影IRC] [{researchProgramNo}] 关于中心调研的提醒";
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_ProjectParticipationReminder", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN, researchProgramNo];
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
//+ "UserOptCommon.html";
|
|
|
|
|
+ (_userInfo.IsEn_Us ? "UserOptCommon_US.html" : "UserOptCommon.html");
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName, researchProgramNo);
|
|
|
|
|
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
"Sir or Madam",
|
|
|
|
|
//---您正在参与展影医疗IRC项目中心调研工作
|
|
|
|
|
_localizer["Mail_CenterResearchReminder", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN],
|
|
|
|
|
_localizer["Mail_CenterResearchReminder", companyName],
|
|
|
|
|
verificationCode
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
// args.Response
|
|
|
|
|
var code = verificationCode.ToString();
|
|
|
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
|
|
|
{
|
|
|
|
|
CodeType = VerifyType.Email,
|
|
|
|
|
HasSend = true,
|
|
|
|
|
Code = code,
|
|
|
|
|
UserId = Guid.Empty,//此时不知道用户
|
|
|
|
|
EmailOrPhone = emailAddress,
|
|
|
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
|
|
|
}).Result;
|
|
|
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurveyLogin, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig,sucessHandle);
|
|
|
|
|
//此时不知道用户
|
|
|
|
|
var sucessHandle = GetEmailSuccessHandle(Guid.Empty, verificationCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, sucessHandle);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task SiteSurveyRejectEmail(MimeMessage messageToSend)
|
|
|
|
|
public async Task SiteSurveyRejectEmail(MimeMessage messageToSend, TrialSiteSurvey trialSiteSurvey, string routeUrl, User? user)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//发件地址
|
|
|
|
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == trialSiteSurvey.TrialId);
|
|
|
|
|
|
|
|
|
|
var siteInfo = await _repository.FirstOrDefaultAsync<TrialSite>(t => t.TrialId == trialSiteSurvey.TrialId && t.Id == trialSiteSurvey.TrialSiteId, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
|
|
|
|
|
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
(user == null ? trialSiteSurvey.UserName : user.LastName + "/ " + user.FirstName),
|
|
|
|
|
trialInfo.TrialCode,
|
|
|
|
|
trialInfo.ResearchProgramNo,
|
|
|
|
|
trialInfo.ExperimentName,
|
|
|
|
|
siteInfo.TrialSiteCode,
|
|
|
|
|
siteInfo.TrialSiteAliasName,
|
|
|
|
|
trialSiteSurvey.LatestBackReason,
|
|
|
|
|
routeUrl,
|
|
|
|
|
(trialSiteSurvey.State == TrialSiteSurveyEnum.ToSubmit ? "inline - block" : "none")
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
|
|
|
|
|
|
|
|
@ -446,49 +419,42 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
//收件地址
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(sysUserInfo.FullName, sysUserInfo.EMail));
|
|
|
|
|
//主题
|
|
|
|
|
//---[来自展影IRC] 关于创建账户的提醒
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_AccountCreationReminder", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN];
|
|
|
|
|
//---[来自展影IRC] 关于创建账户的提醒
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
//+ "AdminAddUser.html";
|
|
|
|
|
+ (_userInfo.IsEn_Us ? "AdminAddUser_US.html" : "AdminAddUser.html");
|
|
|
|
|
|
|
|
|
|
var token = _tokenService.GetToken(IRaCISClaims.Create(_mapper.Map<UserBasicInfo>(sysUserInfo)));
|
|
|
|
|
|
|
|
|
|
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id, u => new User() { EmailToken = token });
|
|
|
|
|
|
|
|
|
|
routeUrl = routeUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us?"en":"zh") + "&access_token=" + token;
|
|
|
|
|
routeUrl = routeUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
|
|
|
|
|
|
|
|
|
|
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
|
|
|
|
|
|
|
|
|
|
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName);
|
|
|
|
|
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
sysUserInfo.UserName,
|
|
|
|
|
sysUserInfo.UserTypeRole.UserTypeShortName,
|
|
|
|
|
redirectUrl
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysCreateUser, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend,_systemEmailConfig);
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//管理员重置密码发送邮件
|
|
|
|
@ -502,38 +468,27 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
//收件地址
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(sysUserInfo.FullName, sysUserInfo.EMail));
|
|
|
|
|
//主题
|
|
|
|
|
//---[来自展影IRC] 关于重置账户密码的提醒
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_AccountPasswordResetReminder", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN];
|
|
|
|
|
//---[来自展影IRC] 关于重置账户密码的提醒
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
//+ "AdminResetUser.html";
|
|
|
|
|
+ (_userInfo.IsEn_Us ? "AdminResetUser_US.html" : "AdminResetUser.html");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName);
|
|
|
|
|
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
sysUserInfo.UserName,
|
|
|
|
|
sysUserInfo.UserTypeRole.UserTypeShortName,
|
|
|
|
|
pwdNotMd5
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysResetPassword, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
|
|
|
|
}
|
|
|
|
@ -553,11 +508,6 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(sysUserInfo.FullName, sysUserInfo.EMail));
|
|
|
|
|
//主题
|
|
|
|
|
// $"[来自展影IRC] [{trialInfo.ResearchProgramNo}]邀请信";
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_InvitationEmail", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN, trialInfo.ResearchProgramNo];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var token = _tokenService.GetToken(IRaCISClaims.Create(_mapper.Map<UserBasicInfo>(sysUserInfo)));
|
|
|
|
@ -567,24 +517,21 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id, u => new User() { EmailToken = token });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ (sysUserInfo.IsFirstAdd ? (_userInfo.IsEn_Us ? "TrialUserFirstJoin_US.html" : "TrialUserFirstJoin.html") : (_userInfo.IsEn_Us ? "TrialUserExistJoin_US.html" : "TrialUserExistJoin.html"));
|
|
|
|
|
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
|
|
|
|
|
|
|
|
|
|
var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
|
|
|
|
|
|
|
|
|
|
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
trialInfo.ExperimentName,
|
|
|
|
|
trialInfo.ResearchProgramNo,
|
|
|
|
@ -593,11 +540,15 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
sysUserInfo.UserTypeRole.UserTypeShortName,
|
|
|
|
|
sysUserInfo.IsFirstAdd ? redirectUrl : baseUrl
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig,null);
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -617,10 +568,6 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(String.Empty, sysUserInfo.EMail));
|
|
|
|
|
//主题
|
|
|
|
|
// $"[来自展影IRC] [{trialInfo.ResearchProgramNo}]邀请信";
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_InvitationEmail", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN,trialInfo.ResearchProgramNo];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -630,23 +577,21 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id, u => new User() { EmailToken = token });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ (sysUserInfo.IsFirstAdd ? (_userInfo.IsEn_Us ? "TrialUserFirstJoin_US.html" : "TrialUserFirstJoin.html") : (_userInfo.IsEn_Us ? "TrialUserExistJoin_US.html" : "TrialUserExistJoin.html") );
|
|
|
|
|
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
|
|
|
|
|
|
|
|
|
|
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
|
|
|
|
|
|
|
|
|
|
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
|
|
|
|
|
|
|
|
|
|
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
trialInfo.ExperimentName,
|
|
|
|
|
trialInfo.ResearchProgramNo,
|
|
|
|
@ -655,11 +600,12 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
sysUserInfo.UserTypeRole.UserTypeShortName,
|
|
|
|
|
sysUserInfo.IsFirstAdd ? redirectUrl : baseUrl
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, null);
|
|
|
|
@ -730,13 +676,8 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
|
|
|
|
//收件地址
|
|
|
|
|
messageToSend.To.Add(new MailboxAddress(doctor.FullName, doctor.EMail));
|
|
|
|
|
//主题
|
|
|
|
|
// $"[来自展影IRC] [{trialInfo.ResearchProgramNo}]邀请信";
|
|
|
|
|
messageToSend.Subject = _localizer["Mail_InvitationEmail", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN, trialInfo.ResearchProgramNo];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new BodyBuilder();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var basicInfo = IRaCISClaims.Create(_mapper.Map<UserBasicInfo>(sysUserInfo));
|
|
|
|
|
|
|
|
|
@ -751,25 +692,25 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id, u => new User() { EmailToken = token });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + userType.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
|
|
|
|
|
|
|
|
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ "EmailTemplate"
|
|
|
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
|
|
|
+ (sysUserInfo.IsFirstAdd ? (_userInfo.IsEn_Us ? "TrialDoctorFirstJoin_US.html" : "TrialDoctorFirstJoin.html") : (_userInfo.IsEn_Us ? "TrialDoctorExistJoin_US.html" : "TrialDoctorExistJoin.html") );
|
|
|
|
|
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
|
|
|
|
|
|
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
|
|
|
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
|
|
|
|
|
|
|
|
|
|
//主题
|
|
|
|
|
// $"[来自展影IRC] [{trialInfo.ResearchProgramNo}]邀请信";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
|
|
|
|
|
|
|
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
|
|
|
|
{
|
|
|
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
|
|
|
|
|
|
|
|
|
|
var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + userType.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
|
|
|
|
|
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
|
|
|
|
|
|
|
|
|
|
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
|
|
|
|
|
|
|
|
|
|
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
|
|
|
|
|
|
|
|
|
|
builder.HtmlBody = string.Format(ReplaceCompanyName(templateInfo),
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
sysUserInfo.FullName,
|
|
|
|
|
trialInfo.ExperimentName,
|
|
|
|
|
trialInfo.ResearchProgramNo,
|
|
|
|
|
trialInfo.TrialCode,
|
|
|
|
@ -777,9 +718,13 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
userType.UserTypeShortName,
|
|
|
|
|
sysUserInfo.IsFirstAdd ? redirectUrl : baseUrl
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
messageToSend.Body = builder.ToMessageBody();
|
|
|
|
|
return (topicStr, htmlBodyStr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messageToSend = await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.DoctorUserFirstJoinTrial : EmailBusinessScenario.DoctorUserExistJoinTrial, messageToSend, emailConfigFunc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, null);
|
|
|
|
|
|
|
|
|
|