EmailerBase.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System.Net.Mail;
  2. using System.Text;
  3. using System.Web;
  4. using Abp.Configuration;
  5. using Abp.Domain.Uow;
  6. using Abp.Net.Mail;
  7. using Abp.Runtime.Security;
  8. using Abp.UI;
  9. using VberZero.Configuration;
  10. using VberZero.DomainService;
  11. namespace VberZero.Net.Emailing;
  12. public class EmailerBase : VzDomainServiceBase
  13. {
  14. public EmailerBase(IEmailTemplateProvider emailTemplateProvider, IEmailSender emailSender, ICurrentUnitOfWorkProvider unitOfWorkProvider, IUnitOfWorkManager unitOfWorkManager, ISettingManager settingManager, IAppConfigurationAccessor appConfigurationAccessor)
  15. {
  16. EmailTemplateProvider = emailTemplateProvider;
  17. EmailSender = emailSender;
  18. UnitOfWorkProvider = unitOfWorkProvider;
  19. Configuration = appConfigurationAccessor.Configuration;
  20. UnitOfWorkManager = unitOfWorkManager;
  21. SettingManager = settingManager;
  22. }
  23. 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;";
  24. private const string LogoImageUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABmElEQVR4Ae3OvUvVcRjG4ScTo0WSloiQIoLEoGhyDRTX6GWJEImWQKIQGrIhoheioNaGKGhpiKCh/yADKUJqcJLGoMheDkJx1KdrjDie8/tyzhkCb7ju+RMb21gnd/LZUj+nucNtTtFPANBLEOH+NUyU4gzfSAC+MEGwgynurRdwmGVGiAIXyBYWWKPGvvUCpkl+MkpUMESdrOAzE5xlvFHALZKkzgw9RBN3yYpWSF6wuVHAeRKAdxwh1vGaLPCUPqJRwG5WyQbmmGSA+Ms8WdEim4jGAfCYbKLOWx4wwwJZ0QeiWcBBdjJHdsFsq4Cr1HhDdsGTVgFjZBddbBXQwzzZJYeaB8AwX8kOWyRaB8B+XpEddKUkYIRpXrJGtukH20sCdrFMdshlonoATLJGtuk9feUBcJxPZDH4zhBRGgCwhaM8Jwv8YoxoN2AbN/hNVlRjnCgJ6CXYyh6O8ZAaWWCeA0RpwCCPWCVLscQl+ojSAIC9XOMj2cIKs5yjn4D2AgAGOcE0N7nPdaYYZYAA2g8o998HbAT8AXjZKQTgI9L4AAAAAElFTkSuQmCC";
  25. private const string LogoImageStyle = "display: block; width: 50px; height: 50px; float: left;";
  26. protected virtual string EmailButtonColor => "#00bb77";
  27. protected IEmailTemplateProvider EmailTemplateProvider { get; }
  28. protected IEmailSender EmailSender { get; }
  29. protected ICurrentUnitOfWorkProvider UnitOfWorkProvider { get; }
  30. protected IConfigurationRoot Configuration { get; }
  31. protected virtual StringBuilder GetTitleAndSubTitle(int? tenantId, string title, string subTitle, string logoImgUrl = null, string logoImgStyle = null)
  32. {
  33. var emailTemplate = new StringBuilder(EmailTemplateProvider.GetDefaultTemplate(tenantId));
  34. logoImgUrl ??= LogoImageUrl;
  35. logoImgStyle ??= LogoImageStyle;
  36. emailTemplate.Replace("{EMAIL_LOGO_URL}", logoImgUrl);
  37. emailTemplate.Replace("{EMAIL_LOGO_STYLE}", logoImgStyle);
  38. emailTemplate.Replace("{EMAIL_TITLE}", title);
  39. emailTemplate.Replace("{EMAIL_SUB_TITLE}", subTitle);
  40. return emailTemplate;
  41. }
  42. protected virtual async Task ReplaceBodyAndSend(string emailAddress, string subject, StringBuilder emailTemplate, StringBuilder mailMessage)
  43. {
  44. emailTemplate.Replace("{EMAIL_BODY}", mailMessage.ToString());
  45. await EmailSender.SendAsync(new MailMessage
  46. {
  47. To = { emailAddress },
  48. Subject = subject,
  49. Body = emailTemplate.ToString(),
  50. IsBodyHtml = true
  51. });
  52. }
  53. /// <summary>
  54. /// Returns link with encrypted parameters
  55. /// </summary>
  56. /// <param name="link"></param>
  57. /// <param name="encrptedParameterName"></param>
  58. /// <returns></returns>
  59. protected virtual string EncryptQueryParameters(string link, string encrptedParameterName = "c")
  60. {
  61. if (!link.Contains("?"))
  62. {
  63. return link;
  64. }
  65. var basePath = link.Substring(0, link.IndexOf('?'));
  66. var query = link.Substring(link.IndexOf('?')).TrimStart('?');
  67. return basePath + "?" + encrptedParameterName + "=" + HttpUtility.UrlEncode(SimpleStringCipher.Instance.Encrypt(query));
  68. }
  69. protected virtual async Task CheckMailSettingsEmptyOrNull()
  70. {
  71. #if R
  72. return;
  73. #endif
  74. if (
  75. string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.DefaultFromAddress))) || string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.Smtp.Host)))
  76. )
  77. {
  78. throw new UserFriendlyException(L("SMTPSettingsNotProvidedWarningText"));
  79. }
  80. if ((await SettingManager.GetSettingValueAsync<bool>(EmailSettingNames.Smtp.UseDefaultCredentials)))
  81. {
  82. return;
  83. }
  84. if (
  85. string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.Smtp.UserName))) ||
  86. string.IsNullOrEmpty((await SettingManager.GetSettingValueAsync(EmailSettingNames.Smtp.Password)))
  87. )
  88. {
  89. throw new UserFriendlyException(L("SMTPSettingsNotProvidedWarningText"));
  90. }
  91. }
  92. }