diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/IEmailSettingsAppService.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/IEmailSettingsAppService.cs index 72d995b251..c318f568ec 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/IEmailSettingsAppService.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/IEmailSettingsAppService.cs @@ -8,4 +8,6 @@ public interface IEmailSettingsAppService : IApplicationService Task GetAsync(); Task UpdateAsync(UpdateEmailSettingsDto input); + + Task SendTestEmailAsync(SendTestEmailInput input); } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SendTestEmailInput.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SendTestEmailInput.cs new file mode 100644 index 0000000000..d8a4d2aa4a --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SendTestEmailInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; + +namespace Volo.Abp.SettingManagement; + +public class SendTestEmailInput +{ + [Required] + public string SenderEmailAddress { get; set; } + + [Required] + public string TargetEmailAddress { get; set; } + + [Required] + public string Subject { get; set; } + + public string Body { get; set; } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs index d624089989..81e58503e7 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs @@ -10,9 +10,11 @@ public class SettingManagementPermissionDefinitionProvider : PermissionDefinitio { var moduleGroup = context.AddGroup(SettingManagementPermissions.GroupName, L("Permission:SettingManagement")); - moduleGroup - .AddPermission(SettingManagementPermissions.Emailing, L("Permission:Emailing")) - .StateCheckers.Add(new AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker()); + var emailPermission = moduleGroup + .AddPermission(SettingManagementPermissions.Emailing, L("Permission:Emailing")); + emailPermission.StateCheckers.Add(new AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker()); + + emailPermission.AddChild(SettingManagementPermissions.EmailingTest, L("Permission:EmailingTest")); } private static LocalizableString L(string name) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissions.cs index dd8e028b45..43f0c5a104 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissions.cs @@ -7,6 +7,8 @@ public class SettingManagementPermissions public const string GroupName = "SettingManagement"; public const string Emailing = GroupName + ".Emailing"; + + public const string EmailingTest = Emailing + ".Test"; public static string[] GetAll() { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs index 92ee36cb04..fe67975517 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs @@ -11,10 +11,13 @@ namespace Volo.Abp.SettingManagement; public class EmailSettingsAppService : SettingManagementAppServiceBase, IEmailSettingsAppService { protected ISettingManager SettingManager { get; } + + protected IEmailSender EmailSender { get; } - public EmailSettingsAppService(ISettingManager settingManager) + public EmailSettingsAppService(ISettingManager settingManager, IEmailSender emailSender) { SettingManager = settingManager; + EmailSender = emailSender; } public virtual async Task GetAsync() @@ -60,6 +63,14 @@ public class EmailSettingsAppService : SettingManagementAppServiceBase, IEmailSe await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.DefaultFromDisplayName, input.DefaultFromDisplayName); } + [Authorize(SettingManagementPermissions.EmailingTest)] + public virtual async Task SendTestEmailAsync(SendTestEmailInput input) + { + await CheckFeatureAsync(); + + await EmailSender.SendAsync(input.SenderEmailAddress, input.TargetEmailAddress, input.Subject, input.Body); + } + protected virtual async Task CheckFeatureAsync() { await FeatureChecker.CheckEnabledAsync(SettingManagementFeatures.Enable); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor index 36d5857776..e5a2313de0 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor @@ -13,7 +13,7 @@ @L["DefaultFromDisplayName"] * - + @@ -23,17 +23,17 @@ @L["DefaultFromAddress"] * - + - @L["SmtpHost"] + @L["SmtpHost"] - + @@ -58,30 +58,30 @@ { - @L["SmtpDomain"] + @L["SmtpDomain"] - + - @L["SmtpUserName"] + @L["SmtpUserName"] - + - @L["SmtpPassword"] + @L["SmtpPassword"] - + @@ -92,8 +92,75 @@ - + + @if (HasSendTestEmailPermission) + { + + } + -} + + @if (HasSendTestEmailPermission) + { + + +
+ + @L["SendTestEmail"] + + + + + + + @L["SenderEmailAddress"] + + + + + + + + + + @L["TargetEmailAddress"] + + + + + + + + + + @L["Subject"] + + + + + + + + + + @L["Body"] + + + + + + + + + + + + + +
+
+
+ } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs index 1cd8ceeb1b..bfc3b47fd7 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Components; using Volo.Abp.AspNetCore.Components.Messages; using Volo.Abp.AspNetCore.Components.Web.Configuration; using Volo.Abp.Auditing; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.SettingManagement.Localization; namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup; @@ -14,6 +15,9 @@ public partial class EmailSettingGroupViewComponent { [Inject] protected IEmailSettingsAppService EmailSettingsAppService { get; set; } + + [Inject] + protected IPermissionChecker PermissionChecker { get; set; } [Inject] private ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; } @@ -23,7 +27,17 @@ public partial class EmailSettingGroupViewComponent protected UpdateEmailSettingsViewModel EmailSettings; + protected SendTestEmailViewModel SendTestEmailInput; + protected Validations EmailSettingValidation; + + protected Validations EmailSettingTestValidation; + + protected Modal SendTestEmailModal; + + protected bool HasSendTestEmailPermission { get; set; } + + public EmailSettingGroupViewComponent() { @@ -36,6 +50,8 @@ public partial class EmailSettingGroupViewComponent try { EmailSettings = ObjectMapper.Map(await EmailSettingsAppService.GetAsync()); + HasSendTestEmailPermission = await PermissionChecker.IsGrantedAsync(SettingManagementPermissions.EmailingTest); + SendTestEmailInput = new SendTestEmailViewModel(); } catch (Exception ex) { @@ -64,6 +80,52 @@ public partial class EmailSettingGroupViewComponent } } + protected virtual async Task OpenSendTestEmailModalAsync() + { + try + { + await EmailSettingTestValidation.ClearAll(); + var emailSettings = await EmailSettingsAppService.GetAsync(); + SendTestEmailInput = new SendTestEmailViewModel + { + SenderEmailAddress = emailSettings.DefaultFromAddress, + TargetEmailAddress = CurrentUser.Email, + Subject = L["TestEmailSubject", new Random().Next(1000, 9999)], + Body = L["TestEmailBody"] + }; + + await SendTestEmailModal.Show(); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual Task CloseSendTestEmailModalAsync() + { + return InvokeAsync(SendTestEmailModal.Hide); + } + + protected virtual async Task SendTestEmailAsync() + { + try + { + if (!await EmailSettingTestValidation.ValidateAll()) + { + return; + } + + await EmailSettingsAppService.SendTestEmailAsync(ObjectMapper.Map(SendTestEmailInput)); + + await Notify.Success(L["SuccessfullySent"]); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + public class UpdateEmailSettingsViewModel { [MaxLength(256)] @@ -104,4 +166,22 @@ public partial class EmailSettingGroupViewComponent [Display(Name = "DefaultFromDisplayName")] public string DefaultFromDisplayName { get; set; } } + + public class SendTestEmailViewModel + { + [Required] + [Display(Name = "SenderEmailAddress")] + public string SenderEmailAddress { get; set; } + + [Required] + [Display(Name = "TargetEmailAddress")] + public string TargetEmailAddress { get; set; } + + [Required] + [Display(Name = "Subject")] + public string Subject { get; set; } + + [Display(Name = "Body")] + public string Body { get; set; } + } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs index 38279c09d4..604996e478 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs @@ -9,5 +9,7 @@ public class SettingManagementBlazorAutoMapperProfile : Profile { CreateMap(); CreateMap(); + + CreateMap(); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json index bec50ed27e..ccc26b5d2d 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json @@ -5,6 +5,15 @@ "SuccessfullySaved": "Successfully saved", "Permission:SettingManagement": "Setting Management", "Permission:Emailing": "Emailing", + "Permission:EmailingTest": "Emailing test", + "SendTestEmail": "Send test email", + "SenderEmailAddress": "Sender email address", + "TargetEmailAddress": "Target email address", + "Subject": "Subject", + "Body": "Body", + "TestEmailSubject": "Test email {0}", + "TestEmailBody": "Test email body message here", + "SuccessfullySent": "Successfully sent", "Menu:Emailing": "Emailing", "SmtpHost": "Host", "SmtpPort": "Port", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json index 7f1ae1c0b7..4dfebf4321 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json @@ -5,6 +5,15 @@ "SuccessfullySaved": "Başarıyla Kaydedildi", "Permission:SettingManagement": "Ayarlar yönetimi", "Permission:Emailing": "Email", + "Permission:EmailingTest": "Email testi", + "SendTestEmail": "Test emaili gönder", + "SenderEmailAddress": "Gönderen email adresi", + "TargetEmailAddress": "Hedef email adresi", + "Subject": "Konu", + "Body": "Gövde", + "TestEmailSubject": "Test email {0}", + "TestEmailBody": "E-posta gövdesi mesajını burada test edin", + "SuccessfullySent": "Başarıyla gönderildi", "Menu:Emailing": "Email", "SmtpHost": "Sunucu", "SmtpPort": "Port", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json index 8606c7da83..dfcc00078b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json @@ -5,6 +5,15 @@ "SuccessfullySaved": "保存成功", "Permission:SettingManagement": "设置管理", "Permission:Emailing": "邮件", + "Permission:EmailingTest": "邮件测试", + "SendTestEmail": "发送测试邮件", + "SenderEmailAddress": "发件人邮箱地址", + "TargetEmailAddress": "收件人邮箱地址", + "Subject": "主题", + "Body": "正文", + "TestEmailSubject": "测试邮件 {0}", + "TestEmailBody": "测试邮件内容", + "SuccessfullySent": "发送成功", "Menu:Emailing": "邮件", "SmtpHost": "主机", "SmtpPort": "端口", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json index d01365223d..371e087bd0 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json @@ -5,6 +5,15 @@ "SuccessfullySaved": "保存成功", "Permission:SettingManagement": "設定管理", "Permission:Emailing": "信箱", + "Permission:EmailingTest": "邮件測試", + "SendTestEmail": "發送測試邮件", + "SenderEmailAddress": "發送者電子郵件地址", + "TargetEmailAddress": "目標電子郵件地址", + "Subject": "主題", + "Body": "體", + "TestEmailSubject": "測試邮件 {0}", + "TestEmailBody": "測試邮件內容", + "SuccessfullySent": "成功發送", "Menu:Emailing": "信箱", "SmtpHost": "主機", "SmtpPort": "Port", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/EmailSettingsClientProxy.Generated.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/EmailSettingsClientProxy.Generated.cs index 54895f25f7..c30a526505 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/EmailSettingsClientProxy.Generated.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/EmailSettingsClientProxy.Generated.cs @@ -27,4 +27,12 @@ public partial class EmailSettingsClientProxy : ClientProxyBase L +@inject IPermissionChecker PermissionChecker @model Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup.EmailSettingGroupViewComponent.UpdateEmailSettingsViewModel
@@ -24,6 +27,12 @@ @L["Save"] + @if (await PermissionChecker.IsGrantedAsync(SettingManagementPermissions.EmailingTest)) + { + + @L["Send test email"] + + } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js index c9871bb3d9..ae8e694de3 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js @@ -1,16 +1,20 @@ (function ($) { + var _sendTestEmailModal = new abp.ModalManager( + abp.appPath + 'SettingManagement/Components/EmailSettingGroup/SendTestEmailModal' + ); + $(function () { var l = abp.localization.getResource('AbpSettingManagement'); $("#EmailSettingsForm").on('submit', function (event) { event.preventDefault(); - - if(!$(this).valid()) { + + if (!$(this).valid()) { return; } - + var form = $(this).serializeFormToObject(); volo.abp.settingManagement.emailSettings.update(form).then(function (result) { $(document).trigger("AbpSettingSaved"); @@ -21,11 +25,28 @@ $('#SmtpUseDefaultCredentials').change(function () { if (this.checked) { $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideUp(); - } - else { + } else { $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideDown(); } }); + + _sendTestEmailModal.onOpen(function () { + var $form = _sendTestEmailModal.getForm(); + _sendTestEmailModal.getForm().off('abp-ajax-success'); + + $form.on('abp-ajax-success', function () { + _sendTestEmailModal.setResult(); + }); + }) + + _sendTestEmailModal.onResult(function () { + abp.notify.success(l('SuccessfullySent')); + }); + + $("#SendTestEmailButton").click(function (e) { + e.preventDefault(); + _sendTestEmailModal.open(); + }); }); })(jQuery); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/SendTestEmailModal.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/SendTestEmailModal.cshtml new file mode 100644 index 0000000000..3e2e82aefa --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/SendTestEmailModal.cshtml @@ -0,0 +1,25 @@ +@page +@using Microsoft.AspNetCore.Mvc.Localization +@using Microsoft.AspNetCore.Mvc.TagHelpers +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@using Volo.Abp.SettingManagement.Localization +@using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup +@model SendTestEmailModal +@inject IHtmlLocalizer L +@{ + Layout = null; +} + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/SendTestEmailModal.cshtml.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/SendTestEmailModal.cshtml.cs new file mode 100644 index 0000000000..7d2819824e --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/SendTestEmailModal.cshtml.cs @@ -0,0 +1,63 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; +using Volo.Abp.SettingManagement.Localization; + +namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; + +[Authorize(SettingManagementPermissions.EmailingTest)] +public class SendTestEmailModal : AbpPageModel +{ + [BindProperty] + public SendTestEmailViewModel Input { get; set; } + + protected IEmailSettingsAppService EmailSettingsAppService { get; } + + public SendTestEmailModal(IEmailSettingsAppService emailSettingsAppService) + { + LocalizationResourceType = typeof(AbpSettingManagementResource); + EmailSettingsAppService = emailSettingsAppService; + } + + public async Task OnGetAsync() + { + var emailSettings = await EmailSettingsAppService.GetAsync(); + Input = new SendTestEmailViewModel + { + SenderEmailAddress = emailSettings.DefaultFromAddress, + TargetEmailAddress = CurrentUser.Email, + Subject = L["TestEmailSubject", new Random().Next(1000, 9999)], + Body = L["TestEmailBody"] + }; + } + + public async Task OnPostAsync() + { + ValidateModel(); + + await EmailSettingsAppService.SendTestEmailAsync(ObjectMapper.Map(Input)); + + return NoContent(); + } + + public class SendTestEmailViewModel + { + [Required] + [Display(Name = "SenderEmailAddress")] + public string SenderEmailAddress { get; set; } + + [Required] + [Display(Name = "TargetEmailAddress")] + public string TargetEmailAddress { get; set; } + + [Required] + [Display(Name = "Subject")] + public string Subject { get; set; } + + [Display(Name = "Body")] + public string Body { get; set; } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs index 19e512da56..77afa99224 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs @@ -8,5 +8,7 @@ public class SettingManagementWebAutoMapperProfile : Profile public SettingManagementWebAutoMapperProfile() { CreateMap(); + + CreateMap(); } } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/wwwroot/client-proxies/settingManagement-proxy.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/wwwroot/client-proxies/settingManagement-proxy.js index b3b5f5731a..2c227c39a9 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/wwwroot/client-proxies/settingManagement-proxy.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/wwwroot/client-proxies/settingManagement-proxy.js @@ -27,6 +27,15 @@ }, ajaxParams)); }; + volo.abp.settingManagement.emailSettings.sendTestEmail = function(input, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/setting-management/emailing/send-test-email', + type: 'POST', + dataType: null, + data: JSON.stringify(input) + }, ajaxParams)); + }; + })(); })();