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