Browse Source

Resolved #5109: Inherit BackgroundEmailSendingJob form AsyncBackgroundJob.

pull/5112/head
Halil İbrahim Kalkan 6 years ago
parent
commit
0e8b9857f1
  1. 18
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs
  2. 6
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJobArgs.cs
  3. 22
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs
  4. 40
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs
  5. 1
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs

18
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<BackgroundEmailSendingJobArgs>, ITransientDependency
public class BackgroundEmailSendingJob : AsyncBackgroundJob<BackgroundEmailSendingJobArgs>, 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);
}
}
}
}
}

6
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; }
/// <summary>
/// Default: true.
/// </summary>
@ -18,4 +20,4 @@ namespace Volo.Abp.Emailing
//TODO: Add other properties and attachments
}
}
}

22
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
}
);
}
/// <summary>
/// Should implement this method to send email in derived classes.
/// </summary>
@ -108,4 +128,4 @@ namespace Volo.Abp.Emailing
}
}
}
}
}

40
framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs

@ -11,12 +11,23 @@ namespace Volo.Abp.Emailing
/// <summary>
/// Sends an email.
/// </summary>
Task SendAsync(string to, string subject, string body, bool isBodyHtml = true);
Task SendAsync(
string to,
string subject,
string body,
bool isBodyHtml = true
);
/// <summary>
/// Sends an email.
/// </summary>
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
);
/// <summary>
/// Sends an email.
@ -24,14 +35,33 @@ namespace Volo.Abp.Emailing
/// <param name="mail">Mail to be sent</param>
/// <param name="normalize">
/// 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.
/// </param>
Task SendAsync(MailMessage mail, bool normalize = true);
Task SendAsync(
MailMessage mail,
bool normalize = true
);
/// <summary>
/// Adds an email to queue to send via background jobs.
/// </summary>
Task QueueAsync(string to, string subject, string body, bool isBodyHtml = true);
Task QueueAsync(
string to,
string subject,
string body,
bool isBodyHtml = true
);
/// <summary>
/// Adds an email to queue to send via background jobs.
/// </summary>
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.
}

1
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
{

Loading…
Cancel
Save