diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 3c3336de1f..13ef057f97 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -242,9 +242,13 @@ 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 +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 @@ -732,6 +736,14 @@ 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 + {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 @@ -857,6 +869,8 @@ 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} + {70DD6E17-B98B-4B00-8F38-C489E291BB53} = {447C8A77-E5F0-4538-8687-7383196D04EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs new file mode 100644 index 0000000000..5a900730bc --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs @@ -0,0 +1,9 @@ +using Newtonsoft.Json; + +namespace Volo.Abp.Json +{ + public class AbpJsonOptions + { + public JsonSerializerSettings SerializerSettings { get; } = new JsonSerializerSettings(); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs index 4c771d6958..1f3c5b3ee7 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs @@ -1,4 +1,5 @@ using System; +using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Volo.Abp.DependencyInjection; @@ -10,9 +11,10 @@ namespace Volo.Abp.Json.Newtonsoft { private readonly IClock _clock; - public AbpJsonIsoDateTimeConverter(IClock clock) + public AbpJsonIsoDateTimeConverter(IClock clock, IOptions abpJsonOptions) { _clock = clock; + DateTimeFormat = abpJsonOptions.Value.SerializerSettings.DateFormatString; } public override bool CanConvert(Type objectType) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs index 99252b8448..1302d193f4 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs @@ -1,4 +1,5 @@ using System; +using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using Volo.Abp.DependencyInjection; @@ -8,13 +9,15 @@ namespace Volo.Abp.Json.Newtonsoft public class NewtonsoftJsonSerializer : IJsonSerializer, ITransientDependency { private readonly AbpJsonIsoDateTimeConverter _dateTimeConverter; + private readonly AbpJsonOptions _abpJsonOptions; private static readonly CamelCaseExceptDictionaryKeysResolver SharedCamelCaseExceptDictionaryKeysResolver = new CamelCaseExceptDictionaryKeysResolver(); - public NewtonsoftJsonSerializer(AbpJsonIsoDateTimeConverter dateTimeConverter) + public NewtonsoftJsonSerializer(AbpJsonIsoDateTimeConverter dateTimeConverter, IOptions abpJsonOptions) { _dateTimeConverter = dateTimeConverter; + _abpJsonOptions = abpJsonOptions.Value; } public string Serialize(object obj, bool camelCase = true, bool indented = false) @@ -34,7 +37,7 @@ namespace Volo.Abp.Json.Newtonsoft protected virtual JsonSerializerSettings CreateSerializerSettings(bool camelCase = true, bool indented = false) { - var settings = new JsonSerializerSettings(); + var settings = _abpJsonOptions.SerializerSettings; settings.Converters.Insert(0, _dateTimeConverter); 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/AbpMailKitModule.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs new file mode 100644 index 0000000000..9027172cf4 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitModule.cs @@ -0,0 +1,11 @@ +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/AbpMailKitOptions.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs new file mode 100644 index 0000000000..fd25f0f7f7 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/AbpMailKitOptions.cs @@ -0,0 +1,9 @@ +using MailKit.Security; + +namespace Volo.Abp.MailKit +{ + public class AbpMailKitOptions + { + public 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..426be33c80 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs @@ -0,0 +1,99 @@ +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 Microsoft.Extensions.Options; +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 AbpMailKitOptions AbpMailKitOptions { get; } + + protected ISmtpEmailSenderConfiguration SmtpConfiguration { get; } + + public MailKitSmtpEmailSender(ISmtpEmailSenderConfiguration smtpConfiguration, + IBackgroundJobManager backgroundJobManager, + IOptions abpMailKitConfiguration) + : base(smtpConfiguration, backgroundJobManager) + { + AbpMailKitOptions = abpMailKitConfiguration.Value; + 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 (AbpMailKitOptions.SecureSocketOption.HasValue) + { + return AbpMailKitOptions.SecureSocketOption.Value; + } + + return await SmtpConfiguration.GetEnableSslAsync() + ? SecureSocketOptions.SslOnConnect + : SecureSocketOptions.StartTlsWhenAvailable; + } + } +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController.cs new file mode 100644 index 0000000000..396d506dde --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController.cs @@ -0,0 +1,27 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + [Route("api/json-result-test")] + public class JsonResultController : AbpController + { + [HttpGet] + [Route("json-result-action")] + public Task ObjectResultAction() + { + return Task.FromResult(new JsonResultModel + { + Time = DateTime.Parse("2019-01-01 11:59:59") + }); + } + + public class JsonResultModel + { + public DateTime Time { get; set; } + } + } + + +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs new file mode 100644 index 0000000000..039631091b --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs @@ -0,0 +1,32 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.Json; +using Xunit; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public class JsonResultController_Tests : AspNetCoreMvcTestBase + { + protected override void ConfigureServices(WebHostBuilderContext context, IServiceCollection services) + { + services.Configure(options => + { + options.SerializerSettings.DateFormatString = "yyyy*MM*dd"; + }); + + base.ConfigureServices(context, services); + } + + [Fact] + public async Task DateFormatString_Test() + { + var time = await GetResponseAsStringAsync( + "/api/json-result-test/json-result-action" + ); + + time.ShouldContain("2019*01*01"); + } + } +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonSerializer_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonSerializer_Tests.cs new file mode 100644 index 0000000000..3ad8738ca8 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonSerializer_Tests.cs @@ -0,0 +1,40 @@ +using System; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.Json; +using Xunit; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public class JsonSerializer_Tests : AspNetCoreMvcTestBase + { + private readonly IJsonSerializer _jsonSerializer; + + public JsonSerializer_Tests() + { + _jsonSerializer = ServiceProvider.GetRequiredService(); + } + + protected override void ConfigureServices(WebHostBuilderContext context, IServiceCollection services) + { + services.Configure(options => + { + options.SerializerSettings.DateFormatString = "yyyy*MM*dd"; + }); + + base.ConfigureServices(context, services); + } + + [Fact] + public void DateFormatString_Test() + { + var output = _jsonSerializer.Serialize(new + { + Time = DateTime.Parse("2019-01-01 11:59:59") + }); + + output.ShouldContain("2019*01*01"); + } + } +} 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 { 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..8404b8df4e --- /dev/null +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs @@ -0,0 +1,48 @@ +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 bgJob = Substitute.For(); + + 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, null); + return mailSender; + } + } +} 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) )] diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index eaea068daa..24a73876a7 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -81,6 +81,7 @@ $projects = ( "framework/src/Volo.Abp.Json", "framework/src/Volo.Abp.Ldap", "framework/src/Volo.Abp.Localization.Abstractions", + "framework/src/Volo.Abp.MailKit", "framework/src/Volo.Abp.Localization", "framework/src/Volo.Abp.MemoryDb", "framework/src/Volo.Abp.MongoDB", diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index bb1ce4d3fb..6f9b15c430 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -13,6 +13,7 @@ + diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs index 22269af68f..498ac83351 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs @@ -21,7 +21,7 @@ namespace MyCompanyName.MyProjectName #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() - .WriteTo.File("Logs/logs.txt") + .WriteTo.Async(c => c.File("Logs/logs.txt")) .CreateLogger(); try diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index 15c9ca046b..cc95438707 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -35,6 +35,7 @@ + diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs index 651b29835a..51278be6eb 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs @@ -21,7 +21,7 @@ namespace MyCompanyName.MyProjectName #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() - .WriteTo.File("Logs/logs.txt") + .WriteTo.Async(c => c.File("Logs/logs.txt")) .CreateLogger(); try diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index 1a678ca517..bd9412a852 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -19,6 +19,7 @@ + diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Program.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Program.cs index e1d6933f9a..2bd7916ecc 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Program.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Program.cs @@ -21,7 +21,7 @@ namespace MyCompanyName.MyProjectName.Web #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() - .WriteTo.File("Logs/logs.txt") + .WriteTo.Async(c => c.File("Logs/logs.txt")) .CreateLogger(); try diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 94e6e8c6b4..c10afa2b21 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -35,6 +35,7 @@ + diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web/Program.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Web/Program.cs index e1d6933f9a..2bd7916ecc 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.Web/Program.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web/Program.cs @@ -21,7 +21,7 @@ namespace MyCompanyName.MyProjectName.Web #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() - .WriteTo.File("Logs/logs.txt") + .WriteTo.Async(c => c.File("Logs/logs.txt")) .CreateLogger(); try