From b10ba343e2d2b792ca1f7945d498353007b15160 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 8 Jul 2019 16:18:31 +0300 Subject: [PATCH 1/8] added Volo.Abp.MailKit --- framework/Volo.Abp.sln | 11 ++- .../Volo.Abp.MailKit/Volo.Abp.MailKit.csproj | 24 +++++ .../Abp/MailKit/AbpMailKitConfiguration.cs | 9 ++ .../Volo/Abp/MailKit/AbpMailKitModule.cs | 15 +++ .../Abp/MailKit/IAbpMailKitConfiguration.cs | 9 ++ .../Abp/MailKit/IMailKitSmtpEmailSender.cs | 11 +++ .../Abp/MailKit/MailKitSmtpEmailSender.cs | 97 +++++++++++++++++++ 7 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj create mode 100644 framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitConfiguration.cs create mode 100644 framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs create mode 100644 framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs create mode 100644 framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IMailKitSmtpEmailSender.cs create mode 100644 framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 3c3336de1f..ce8f43bbae 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -242,9 +242,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Ldap", "src\Volo.A EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Ldap.Tests", "test\Volo.Abp.Ldap.Tests\Volo.Abp.Ldap.Tests.csproj", "{38FB8F75-426E-4265-8D0E-E121837B6FCC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Dapper", "src\Volo.Abp.Dapper\Volo.Abp.Dapper.csproj", "{D863A3C3-CC1D-426F-BDD4-02E7AE2A3170}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Dapper", "src\Volo.Abp.Dapper\Volo.Abp.Dapper.csproj", "{D863A3C3-CC1D-426F-BDD4-02E7AE2A3170}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Dapper.Tests", "test\Volo.Abp.Dapper.Tests\Volo.Abp.Dapper.Tests.csproj", "{E026A085-D881-4AE0-9F08-422AC3903BD7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Dapper.Tests", "test\Volo.Abp.Dapper.Tests\Volo.Abp.Dapper.Tests.csproj", "{E026A085-D881-4AE0-9F08-422AC3903BD7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.MailKit", "src\Volo.Abp.MailKit\Volo.Abp.MailKit.csproj", "{0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -732,6 +734,10 @@ Global {E026A085-D881-4AE0-9F08-422AC3903BD7}.Debug|Any CPU.Build.0 = Debug|Any CPU {E026A085-D881-4AE0-9F08-422AC3903BD7}.Release|Any CPU.ActiveCfg = Release|Any CPU {E026A085-D881-4AE0-9F08-422AC3903BD7}.Release|Any CPU.Build.0 = Release|Any CPU + {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -857,6 +863,7 @@ Global {38FB8F75-426E-4265-8D0E-E121837B6FCC} = {447C8A77-E5F0-4538-8687-7383196D04EA} {D863A3C3-CC1D-426F-BDD4-02E7AE2A3170} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {E026A085-D881-4AE0-9F08-422AC3903BD7} = {447C8A77-E5F0-4538-8687-7383196D04EA} + {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj new file mode 100644 index 0000000000..8af1220e76 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj @@ -0,0 +1,24 @@ + + + + + + netstandard2.0 + Volo.Abp.MailKit + Volo.Abp.MailKit + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitConfiguration.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitConfiguration.cs new file mode 100644 index 0000000000..49091b8c82 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitConfiguration.cs @@ -0,0 +1,9 @@ +using MailKit.Security; + +namespace Volo.Abp.MailKit +{ + public class AbpMailKitConfiguration : IAbpMailKitConfiguration + { + public SecureSocketOptions? SecureSocketOption { get; set; } + } +} diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs new file mode 100644 index 0000000000..1aa0101035 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Emailing; +using Volo.Abp.Modularity; + +namespace Volo.Abp.MailKit +{ + [DependsOn(typeof(AbpEmailingModule))] + public class AbpMailKitModule : AbpModule + { + + } +} diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs new file mode 100644 index 0000000000..c590db3774 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs @@ -0,0 +1,9 @@ +using MailKit.Security; + +namespace Volo.Abp.MailKit +{ + public interface IAbpMailKitConfiguration + { + SecureSocketOptions? SecureSocketOption { get; set; } + } +} diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IMailKitSmtpEmailSender.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IMailKitSmtpEmailSender.cs new file mode 100644 index 0000000000..54514814fc --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IMailKitSmtpEmailSender.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using MailKit.Net.Smtp; +using Volo.Abp.Emailing; + +namespace Volo.Abp.MailKit +{ + public interface IMailKitSmtpEmailSender: IEmailSender + { + Task BuildClientAsync(); + } +} diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs new file mode 100644 index 0000000000..5213a7b7f5 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs @@ -0,0 +1,97 @@ +using System.Net.Mail; +using System.Threading.Tasks; +using Volo.Abp.BackgroundJobs; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Emailing; +using Volo.Abp.Emailing.Smtp; +using MailKit.Security; +using Microsoft.Extensions.DependencyInjection; +using MimeKit; +using Volo.Abp.Threading; +using SmtpClient = MailKit.Net.Smtp.SmtpClient; + +namespace Volo.Abp.MailKit +{ + [Dependency(ServiceLifetime.Transient, ReplaceServices = true)] + public class MailKitSmtpEmailSender : EmailSenderBase, IMailKitSmtpEmailSender + { + protected IAbpMailKitConfiguration AbpMailKitConfiguration { get; } + + protected ISmtpEmailSenderConfiguration SmtpConfiguration { get; } + + public MailKitSmtpEmailSender(ISmtpEmailSenderConfiguration smtpConfiguration, + IBackgroundJobManager backgroundJobManager, + IAbpMailKitConfiguration abpMailKitConfiguration) + : base(smtpConfiguration, backgroundJobManager) + { + AbpMailKitConfiguration = abpMailKitConfiguration; + SmtpConfiguration = smtpConfiguration; + } + + protected override async Task SendEmailAsync(MailMessage mail) + { + using (var client = await BuildClientAsync()) + { + var message = MimeMessage.CreateFromMailMessage(mail); + await client.SendAsync(message); + await client.DisconnectAsync(true); + } + } + + protected override void SendEmail(MailMessage mail) + { + using (var client = AsyncHelper.RunSync(BuildClientAsync)) + { + var message = MimeMessage.CreateFromMailMessage(mail); + client.Send(message); + client.Disconnect(true); + } + } + + public async Task BuildClientAsync() + { + var client = new SmtpClient(); + + try + { + await ConfigureClient(client); + return client; + } + catch + { + client.Dispose(); + throw; + } + } + + protected virtual async Task ConfigureClient(SmtpClient client) + { + client.Connect( + await SmtpConfiguration.GetHostAsync(), + await SmtpConfiguration.GetPortAsync(), + await GetSecureSocketOption() + ); + + if (await SmtpConfiguration.GetUseDefaultCredentialsAsync()) + { + return; + } + + client.Authenticate( + await SmtpConfiguration.GetUserNameAsync(), + await SmtpConfiguration.GetPasswordAsync() + ); + } + protected virtual async Task GetSecureSocketOption() + { + if (AbpMailKitConfiguration.SecureSocketOption.HasValue) + { + return AbpMailKitConfiguration.SecureSocketOption.Value; + } + + return await SmtpConfiguration.GetEnableSslAsync() + ? SecureSocketOptions.SslOnConnect + : SecureSocketOptions.StartTlsWhenAvailable; + } + } +} From db82b20e28b6cf87e4e764f042d87edda8ffe3ae Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 9 Jul 2019 08:38:16 +0300 Subject: [PATCH 2/8] Update common.ps1 --- nupkg/common.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 0fed9484b0..518e094c67 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -81,6 +81,7 @@ $projects = ( "framework/src/Volo.Abp.Json", "framework/src/Volo.Abp.Localization", "framework/src/Volo.Abp.Localization.Abstractions", + "framework/src/Volo.Abp.MailKit", "framework/src/Volo.Abp.MemoryDb", "framework/src/Volo.Abp.MongoDB", "framework/src/Volo.Abp.MultiTenancy", From b31814bae051991bec58f9def3e6d39ead3c9fda Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 9 Jul 2019 08:45:22 +0300 Subject: [PATCH 3/8] Update AbpMailKitModule.cs --- .../Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs index 1aa0101035..9027172cf4 100644 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Emailing; +using Volo.Abp.Emailing; using Volo.Abp.Modularity; namespace Volo.Abp.MailKit From f5813a9c18fc48b4bf3487c98a15aa9bcd26fb64 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 9 Jul 2019 08:46:31 +0300 Subject: [PATCH 4/8] Update AbpEmailingTestModule.cs --- .../Volo/Abp/Emailing/AbpEmailingTestModule.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/AbpEmailingTestModule.cs b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/AbpEmailingTestModule.cs index 831258c5d5..2746da3847 100644 --- a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/AbpEmailingTestModule.cs +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/AbpEmailingTestModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Emailing.Localization; +using Volo.Abp.Autofac; +using Volo.Abp.Emailing.Localization; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -7,6 +8,7 @@ namespace Volo.Abp.Emailing { [DependsOn( typeof(AbpEmailingModule), + typeof(AbpAutofacModule), typeof(AbpTestBaseModule))] public class AbpEmailingTestModule : AbpModule { From dce4a4f199cc1418cea6936275ba7292084c5a12 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 9 Jul 2019 09:15:36 +0300 Subject: [PATCH 5/8] removed redundant reference to emaling module from account.application --- .../Volo.Abp.Account.Application.csproj | 1 - .../Volo/Abp/Account/AbpAccountApplicationModule.cs | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj index 097e1f6c55..14f9c8f991 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj +++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj @@ -13,7 +13,6 @@ - diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs index 8fecc2d4e0..601ce9a3d3 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs +++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs @@ -1,5 +1,4 @@ -using Volo.Abp.Emailing; -using Volo.Abp.Identity; +using Volo.Abp.Identity; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.UI.Navigation; @@ -9,7 +8,6 @@ namespace Volo.Abp.Account { [DependsOn( typeof(AbpAccountApplicationContractsModule), - typeof(AbpEmailingModule), typeof(AbpIdentityApplicationModule), typeof(AbpUiNavigationModule) )] From 4252c8a58646f3751b0097a7d349822b9b6d7614 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 9 Jul 2019 13:09:48 +0300 Subject: [PATCH 6/8] added tests --- framework/Volo.Abp.sln | 7 +++ .../Volo.Abp.MailKit.Tests.csproj | 20 ++++++++ .../Volo/Abp/MailKit/AbpMailKitTestModule.cs | 13 +++++ .../MailKit/MailKitSmtpEmailSender_Tests.cs | 49 +++++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj create mode 100644 framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/AbpMailKitTestModule.cs create mode 100644 framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index ce8f43bbae..13ef057f97 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -248,6 +248,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Dapper.Tests", "te EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.MailKit", "src\Volo.Abp.MailKit\Volo.Abp.MailKit.csproj", "{0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.MailKit.Tests", "test\Volo.Abp.MailKit.Tests\Volo.Abp.MailKit.Tests.csproj", "{70DD6E17-B98B-4B00-8F38-C489E291BB53}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -738,6 +740,10 @@ Global {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}.Debug|Any CPU.Build.0 = Debug|Any CPU {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4}.Release|Any CPU.Build.0 = Release|Any CPU + {70DD6E17-B98B-4B00-8F38-C489E291BB53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70DD6E17-B98B-4B00-8F38-C489E291BB53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70DD6E17-B98B-4B00-8F38-C489E291BB53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70DD6E17-B98B-4B00-8F38-C489E291BB53}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -864,6 +870,7 @@ Global {D863A3C3-CC1D-426F-BDD4-02E7AE2A3170} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {E026A085-D881-4AE0-9F08-422AC3903BD7} = {447C8A77-E5F0-4538-8687-7383196D04EA} {0CAED4CC-1CFD-4092-A326-AFE4DB3A9AB4} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {70DD6E17-B98B-4B00-8F38-C489E291BB53} = {447C8A77-E5F0-4538-8687-7383196D04EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj new file mode 100644 index 0000000000..17097b1bf0 --- /dev/null +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj @@ -0,0 +1,20 @@ + + + + netcoreapp2.2 + latest + true + false + false + false + + + + + + + + + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/AbpMailKitTestModule.cs b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/AbpMailKitTestModule.cs new file mode 100644 index 0000000000..b0d6e9f7da --- /dev/null +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/AbpMailKitTestModule.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; + +namespace Volo.Abp.MailKit +{ + [DependsOn( + typeof(AbpMailKitModule), + typeof(AbpAutofacModule), + typeof(AbpTestBaseModule))] + public class AbpMailKitTestModule :AbpModule + { + } +} diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs new file mode 100644 index 0000000000..3af4f7e50b --- /dev/null +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs @@ -0,0 +1,49 @@ +using System.Net.Mail; +using System.Threading.Tasks; +using NSubstitute; +using Volo.Abp.BackgroundJobs; +using Volo.Abp.Emailing.Smtp; +using Xunit; + +namespace Volo.Abp.MailKit +{ + //Tests are commented because those tests can pass only when a true email configuration is set. + public class MailKitSmtpEmailSender_Tests : AbpIntegratedTest + { + //[Fact] + public async Task ShouldSendMailMessageAsync() + { + var mailSender = CreateMailKitEmailSender(); + var mailMessage = new MailMessage("from_mail_address@asd.com", "to_mail_address@asd.com", "subject", "body") + { IsBodyHtml = true }; + + await mailSender.SendAsync(mailMessage); + } + + //[Fact] + public void ShouldSendMailMessage() + { + var mailSender = CreateMailKitEmailSender(); + var mailMessage = new MailMessage("from_mail_address@asd.com", "to_mail_address@asd.com", "subject", "body") + { IsBodyHtml = true }; + + mailSender.Send(mailMessage); + } + + private static MailKitSmtpEmailSender CreateMailKitEmailSender() + { + var mailConfig = Substitute.For(); + var mailKitConfig = Substitute.For(); + var bgJob = Substitute.For(); + + mailConfig.GetHostAsync().Returns("stmp_server_name"); + mailConfig.GetUserNameAsync().Returns("mail_server_user_name"); + mailConfig.GetPasswordAsync().Returns("mail_server_password"); + mailConfig.GetPortAsync().Returns(587); + mailConfig.GetEnableSslAsync().Returns(false); + + var mailSender = new MailKitSmtpEmailSender(mailConfig, bgJob, mailKitConfig); + return mailSender; + } + } +} From cd690f52b00c98a8b86ef02079ba49865bf1613e Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 10 Jul 2019 08:51:08 +0300 Subject: [PATCH 7/8] Refactor --- ...MailKitConfiguration.cs => AbpMailKitOptions.cs} | 7 ++++++- .../Volo/Abp/MailKit/IAbpMailKitConfiguration.cs | 9 --------- .../Volo/Abp/MailKit/MailKitSmtpEmailSender.cs | 12 +++++++----- .../Abp/MailKit/MailKitSmtpEmailSender_Tests.cs | 13 ++++++------- 4 files changed, 19 insertions(+), 22 deletions(-) rename framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/{AbpMailKitConfiguration.cs => AbpMailKitOptions.cs} (51%) delete mode 100644 framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitConfiguration.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs similarity index 51% rename from framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitConfiguration.cs rename to framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs index 49091b8c82..8810d9e559 100644 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitConfiguration.cs +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs @@ -2,8 +2,13 @@ namespace Volo.Abp.MailKit { - public class AbpMailKitConfiguration : IAbpMailKitConfiguration + public class AbpMailKitOptions { public SecureSocketOptions? SecureSocketOption { get; set; } + + public AbpMailKitOptions() + { + SecureSocketOption = null; + } } } diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs deleted file mode 100644 index c590db3774..0000000000 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/IAbpMailKitConfiguration.cs +++ /dev/null @@ -1,9 +0,0 @@ -using MailKit.Security; - -namespace Volo.Abp.MailKit -{ - public interface IAbpMailKitConfiguration - { - SecureSocketOptions? SecureSocketOption { get; set; } - } -} diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs index 5213a7b7f5..426be33c80 100644 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs @@ -6,6 +6,7 @@ using Volo.Abp.Emailing; using Volo.Abp.Emailing.Smtp; using MailKit.Security; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using MimeKit; using Volo.Abp.Threading; using SmtpClient = MailKit.Net.Smtp.SmtpClient; @@ -15,16 +16,16 @@ namespace Volo.Abp.MailKit [Dependency(ServiceLifetime.Transient, ReplaceServices = true)] public class MailKitSmtpEmailSender : EmailSenderBase, IMailKitSmtpEmailSender { - protected IAbpMailKitConfiguration AbpMailKitConfiguration { get; } + protected AbpMailKitOptions AbpMailKitOptions { get; } protected ISmtpEmailSenderConfiguration SmtpConfiguration { get; } public MailKitSmtpEmailSender(ISmtpEmailSenderConfiguration smtpConfiguration, IBackgroundJobManager backgroundJobManager, - IAbpMailKitConfiguration abpMailKitConfiguration) + IOptions abpMailKitConfiguration) : base(smtpConfiguration, backgroundJobManager) { - AbpMailKitConfiguration = abpMailKitConfiguration; + AbpMailKitOptions = abpMailKitConfiguration.Value; SmtpConfiguration = smtpConfiguration; } @@ -82,11 +83,12 @@ namespace Volo.Abp.MailKit await SmtpConfiguration.GetPasswordAsync() ); } + protected virtual async Task GetSecureSocketOption() { - if (AbpMailKitConfiguration.SecureSocketOption.HasValue) + if (AbpMailKitOptions.SecureSocketOption.HasValue) { - return AbpMailKitConfiguration.SecureSocketOption.Value; + return AbpMailKitOptions.SecureSocketOption.Value; } return await SmtpConfiguration.GetEnableSslAsync() diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs index 3af4f7e50b..8404b8df4e 100644 --- a/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs @@ -33,16 +33,15 @@ namespace Volo.Abp.MailKit private static MailKitSmtpEmailSender CreateMailKitEmailSender() { var mailConfig = Substitute.For(); - var mailKitConfig = Substitute.For(); var bgJob = Substitute.For(); - mailConfig.GetHostAsync().Returns("stmp_server_name"); - mailConfig.GetUserNameAsync().Returns("mail_server_user_name"); - mailConfig.GetPasswordAsync().Returns("mail_server_password"); - mailConfig.GetPortAsync().Returns(587); - mailConfig.GetEnableSslAsync().Returns(false); + mailConfig.GetHostAsync().Returns(Task.FromResult("stmp_server_name")); + mailConfig.GetUserNameAsync().Returns(Task.FromResult("mail_server_user_name")); + mailConfig.GetPasswordAsync().Returns(Task.FromResult("mail_server_password")); + mailConfig.GetPortAsync().Returns(Task.FromResult(587)); + mailConfig.GetEnableSslAsync().Returns(Task.FromResult(false)); - var mailSender = new MailKitSmtpEmailSender(mailConfig, bgJob, mailKitConfig); + var mailSender = new MailKitSmtpEmailSender(mailConfig, bgJob, null); return mailSender; } } From 2ae42a6d4336875fd9dd8a079e173a10ce07367d Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 12 Jul 2019 08:25:47 +0300 Subject: [PATCH 8/8] removed constructor from AbpMailKitOptions --- .../Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs index 8810d9e559..fd25f0f7f7 100644 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs @@ -5,10 +5,5 @@ namespace Volo.Abp.MailKit public class AbpMailKitOptions { public SecureSocketOptions? SecureSocketOption { get; set; } - - public AbpMailKitOptions() - { - SecureSocketOption = null; - } } }