diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs index 8ef235f285..0b058756c0 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs @@ -55,6 +55,11 @@ namespace Volo.Abp.BackgroundJobs return _jobConfigurationsByArgsType.Values.ToImmutableList(); } + public void AddJob() + { + AddJob(typeof(TJob)); + } + public void AddJob(Type jobType) { AddJob(new BackgroundJobConfiguration(jobType)); diff --git a/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj b/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj index c93b84ea0b..ab1b4ed370 100644 --- a/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj +++ b/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj @@ -19,6 +19,7 @@ + diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs index e3377081f4..c61743b212 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.BackgroundJobs; using Volo.Abp.Emailing.Templates; using Volo.Abp.Emailing.Templates.Virtual; using Volo.Abp.Localization; @@ -27,6 +28,11 @@ namespace Volo.Abp.Emailing options.FileSets.AddEmbedded(); }); + Configure(options => + { + options.AddJob(); + }); + context.Services.Configure(options => { options.Templates diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs new file mode 100644 index 0000000000..eab71ba145 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs @@ -0,0 +1,19 @@ +using Volo.Abp.BackgroundJobs; + +namespace Volo.Abp.Emailing +{ + public class BackgroundEmailSendingJob : BackgroundJob + { + protected IEmailSender EmailSender { get; } + + public BackgroundEmailSendingJob(IEmailSender emailSender) + { + EmailSender = emailSender; + } + + public override void Execute(BackgroundEmailSendingJobArgs args) + { + EmailSender.Send(args.To, args.Subject, args.Body, args.IsBodyHtml); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJobArgs.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJobArgs.cs new file mode 100644 index 0000000000..54da9cddb0 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJobArgs.cs @@ -0,0 +1,21 @@ +using System; + +namespace Volo.Abp.Emailing +{ + [Serializable] + public class BackgroundEmailSendingJobArgs + { + public string To { get; set; } + + public string Subject { get; set; } + + public string Body { get; set; } + + /// + /// Default: true. + /// + public bool IsBodyHtml { get; set; } = true; + + //TODO: Add other properties and attachments + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs index 59d2b7af72..4a2d7c16ef 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs @@ -2,6 +2,7 @@ using System; using System.Net.Mail; using System.Text; using System.Threading.Tasks; +using Volo.Abp.BackgroundJobs; namespace Volo.Abp.Emailing { @@ -10,15 +11,17 @@ namespace Volo.Abp.Emailing /// public abstract class EmailSenderBase : IEmailSender { - public IEmailSenderConfiguration Configuration { get; } + protected IEmailSenderConfiguration Configuration { get; } + + protected IBackgroundJobManager BackgroundJobManager { get; } /// /// Constructor. /// - /// Configuration - protected EmailSenderBase(IEmailSenderConfiguration configuration) + protected EmailSenderBase(IEmailSenderConfiguration configuration, IBackgroundJobManager backgroundJobManager) { Configuration = configuration; + BackgroundJobManager = backgroundJobManager; } public virtual async Task SendAsync(string to, string subject, string body, bool isBodyHtml = true) @@ -63,6 +66,19 @@ namespace Volo.Abp.Emailing await SendEmailAsync(mail); } + public virtual async Task QueueAsync(string to, string subject, string body, bool isBodyHtml = true) + { + await BackgroundJobManager.EnqueueAsync( + new BackgroundEmailSendingJobArgs + { + To = to, + Subject = subject, + Body = body, + IsBodyHtml = isBodyHtml + } + ); + } + public virtual void Send(MailMessage mail, bool normalize = true) { if (normalize) diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs index 8c4b87428a..999469ce0c 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs @@ -47,5 +47,12 @@ namespace Volo.Abp.Emailing /// If true, it sets sender address/name if it's not set before and makes mail encoding UTF-8. /// Task SendAsync(MailMessage mail, bool normalize = true); + + /// + /// Adds an email to queue to send via background jobs. + /// + Task QueueAsync(string to, string subject, string body, bool isBodyHtml = true); + + //TODO: Add other Queue methods too. Problem: MailMessage is not serializable so can not be used in background jobs. } }