diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs index f471fecaa1..a81bfb8c7f 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs @@ -1,10 +1,11 @@ +using System; +using System.Threading.Tasks; using Volo.Abp.BackgroundJobs; using Volo.Abp.DependencyInjection; -using Volo.Abp.Threading; namespace Volo.Abp.Emailing { - public class BackgroundEmailSendingJob : BackgroundJob, ITransientDependency + public class BackgroundEmailSendingJob : AsyncBackgroundJob, ITransientDependency { protected IEmailSender EmailSender { get; } @@ -13,9 +14,16 @@ namespace Volo.Abp.Emailing EmailSender = emailSender; } - public override void Execute(BackgroundEmailSendingJobArgs args) + public override async Task ExecuteAsync(BackgroundEmailSendingJobArgs args) { - AsyncHelper.RunSync(() => EmailSender.SendAsync(args.To, args.Subject, args.Body, args.IsBodyHtml)); + if (args.From.IsNullOrWhiteSpace()) + { + await EmailSender.SendAsync(args.To, args.Subject, args.Body, args.IsBodyHtml); + } + else + { + await EmailSender.SendAsync(args.From, 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 index 54da9cddb0..189800e0a8 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJobArgs.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJobArgs.cs @@ -5,12 +5,14 @@ namespace Volo.Abp.Emailing [Serializable] public class BackgroundEmailSendingJobArgs { + public string From { get; set; } + public string To { get; set; } public string Subject { get; set; } public string Body { get; set; } - + /// /// Default: true. /// @@ -18,4 +20,4 @@ namespace Volo.Abp.Emailing //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 f6588de9fb..b278d70d16 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs @@ -69,6 +69,26 @@ namespace Volo.Abp.Emailing ); } + public async Task QueueAsync(string from, string to, string subject, string body, bool isBodyHtml = true) + { + if (!BackgroundJobManager.IsAvailable()) + { + await SendAsync(from, to, subject, body, isBodyHtml); + return; + } + + await BackgroundJobManager.EnqueueAsync( + new BackgroundEmailSendingJobArgs + { + From = from, + To = to, + Subject = subject, + Body = body, + IsBodyHtml = isBodyHtml + } + ); + } + /// /// Should implement this method to send email in derived classes. /// @@ -108,4 +128,4 @@ namespace Volo.Abp.Emailing } } } -} \ No newline at end of file +} 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 612d8f078c..bdaba4f15b 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs @@ -11,12 +11,23 @@ namespace Volo.Abp.Emailing /// /// Sends an email. /// - Task SendAsync(string to, string subject, string body, bool isBodyHtml = true); + Task SendAsync( + string to, + string subject, + string body, + bool isBodyHtml = true + ); /// /// Sends an email. /// - Task SendAsync(string from, string to, string subject, string body, bool isBodyHtml = true); + Task SendAsync( + string from, + string to, + string subject, + string body, + bool isBodyHtml = true + ); /// /// Sends an email. @@ -24,14 +35,33 @@ namespace Volo.Abp.Emailing /// Mail to be sent /// /// Should normalize email? - /// If true, it sets sender address/name if it's not set before and makes mail encoding UTF-8. + /// 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); + 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); + Task QueueAsync( + string to, + string subject, + string body, + bool isBodyHtml = true + ); + + /// + /// Adds an email to queue to send via background jobs. + /// + Task QueueAsync( + string from, + 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. } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs index f97fd57b18..24ca7d6a34 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs @@ -4,7 +4,6 @@ using System.Net.Mail; using System.Threading.Tasks; using Volo.Abp.BackgroundJobs; using Volo.Abp.DependencyInjection; -using Volo.Abp.Threading; namespace Volo.Abp.Emailing.Smtp {