using System.Net.Mail; using System.Text; using System.Web; using Abp.Configuration; using Abp.Domain.Uow; using Abp.Net.Mail; using Abp.Runtime.Security; using Abp.UI; using VberZero.Configuration; using VberZero.DomainService; namespace VberZero.Net.Emailing; public class EmailerBase : VzDomainServiceBase { public EmailerBase(IEmailTemplateProvider emailTemplateProvider, IEmailSender emailSender, ICurrentUnitOfWorkProvider unitOfWorkProvider, IUnitOfWorkManager unitOfWorkManager, ISettingManager settingManager, IAppConfigurationAccessor appConfigurationAccessor) { EmailTemplateProvider = emailTemplateProvider; EmailSender = emailSender; UnitOfWorkProvider = unitOfWorkProvider; Configuration = appConfigurationAccessor.Configuration; UnitOfWorkManager = unitOfWorkManager; SettingManager = settingManager; } protected virtual string EmailButtonStyle => "padding-left: 30px; padding-right: 30px; padding-top: 12px; padding-bottom: 12px; color: #ffffff; background-color: #00bb77; font-size: 14pt; text-decoration: none;"; private const string LogoImageUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABmElEQVR4Ae3OvUvVcRjG4ScTo0WSloiQIoLEoGhyDRTX6GWJEImWQKIQGrIhoheioNaGKGhpiKCh/yADKUJqcJLGoMheDkJx1KdrjDie8/tyzhkCb7ju+RMb21gnd/LZUj+nucNtTtFPANBLEOH+NUyU4gzfSAC+MEGwgynurRdwmGVGiAIXyBYWWKPGvvUCpkl+MkpUMESdrOAzE5xlvFHALZKkzgw9RBN3yYpWSF6wuVHAeRKAdxwh1vGaLPCUPqJRwG5WyQbmmGSA+Ms8WdEim4jGAfCYbKLOWx4wwwJZ0QeiWcBBdjJHdsFsq4Cr1HhDdsGTVgFjZBddbBXQwzzZJYeaB8AwX8kOWyRaB8B+XpEddKUkYIRpXrJGtukH20sCdrFMdshlonoATLJGtuk9feUBcJxPZDH4zhBRGgCwhaM8Jwv8YoxoN2AbN/hNVlRjnCgJ6CXYyh6O8ZAaWWCeA0RpwCCPWCVLscQl+ojSAIC9XOMj2cIKs5yjn4D2AgAGOcE0N7nPdaYYZYAA2g8o998HbAT8AXjZKQTgI9L4AAAAAElFTkSuQmCC"; private const string LogoImageStyle = "display: block; width: 50px; height: 50px; float: left;"; protected virtual string EmailButtonColor => "#00bb77"; protected IEmailTemplateProvider EmailTemplateProvider { get; } protected IEmailSender EmailSender { get; } protected ICurrentUnitOfWorkProvider UnitOfWorkProvider { get; } protected IConfigurationRoot Configuration { get; } protected virtual StringBuilder GetTitleAndSubTitle(int? tenantId, string title, string subTitle, string logoImgUrl = null, string logoImgStyle = null) { var emailTemplate = new StringBuilder(EmailTemplateProvider.GetDefaultTemplate(tenantId)); logoImgUrl ??= LogoImageUrl; logoImgStyle ??= LogoImageStyle; emailTemplate.Replace("{EMAIL_LOGO_URL}", logoImgUrl); emailTemplate.Replace("{EMAIL_LOGO_STYLE}", logoImgStyle); emailTemplate.Replace("{EMAIL_TITLE}", title); emailTemplate.Replace("{EMAIL_SUB_TITLE}", subTitle); return emailTemplate; } protected virtual async Task ReplaceBodyAndSend(string emailAddress, string subject, StringBuilder emailTemplate, StringBuilder mailMessage) { emailTemplate.Replace("{EMAIL_BODY}", mailMessage.ToString()); await EmailSender.SendAsync(new MailMessage { To = { emailAddress }, Subject = subject, Body = emailTemplate.ToString(), IsBodyHtml = true }); } /// /// Returns link with encrypted parameters /// /// /// /// protected virtual string EncryptQueryParameters(string link, string encrptedParameterName = "c") { if (!link.Contains("?")) { return link; } var basePath = link.Substring(0, link.IndexOf('?')); var query = link.Substring(link.IndexOf('?')).TrimStart('?'); return basePath + "?" + encrptedParameterName + "=" + HttpUtility.UrlEncode(SimpleStringCipher.Instance.Encrypt(query)); } protected virtual async Task CheckMailSettingsEmptyOrNull() { #if R return; #endif if ( string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.DefaultFromAddress))) || string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.Smtp.Host))) ) { throw new UserFriendlyException(L("SMTPSettingsNotProvidedWarningText")); } if ((await SettingManager.GetSettingValueAsync(EmailSettingNames.Smtp.UseDefaultCredentials))) { return; } if ( string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.Smtp.UserName))) || string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.Smtp.Password))) ) { throw new UserFriendlyException(L("SMTPSettingsNotProvidedWarningText")); } } }