Small SendEmail API enhancements
This commit is contained in:
parent
86980a752e
commit
4d748c8371
|
|
@ -1,11 +1,13 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Elsa.Activities.Email.Options;
|
||||
using Elsa.Activities.Email.Services;
|
||||
using Elsa.ActivityResults;
|
||||
using Elsa.Attributes;
|
||||
using Elsa.Services;
|
||||
using Elsa.Services.Models;
|
||||
|
||||
using Microsoft.Extensions.Options;
|
||||
using MimeKit;
|
||||
using MimeKit.Text;
|
||||
|
||||
|
|
@ -16,23 +18,25 @@ namespace Elsa.Activities.Email
|
|||
public class SendEmail : Activity
|
||||
{
|
||||
private readonly ISmtpService _smtpService;
|
||||
private readonly SmtpOptions _options;
|
||||
|
||||
public SendEmail(ISmtpService smtpService)
|
||||
public SendEmail(ISmtpService smtpService, IOptions<SmtpOptions> options)
|
||||
{
|
||||
_smtpService = smtpService;
|
||||
_options = options.Value;
|
||||
}
|
||||
|
||||
[ActivityProperty(Hint = "The sender's email address.")]
|
||||
public string? From { get; set; }
|
||||
|
||||
[ActivityProperty(Hint = "The recipients email addresses.")]
|
||||
public string[] To { get; set; } = default!;
|
||||
public ICollection<string> To { get; set; } = new List<string>();
|
||||
|
||||
[ActivityProperty(Hint = "The cc recipients email addresses. (Optional)")]
|
||||
public string[]? Cc { get; set; }
|
||||
public ICollection<string> Cc { get; set; } = new List<string>();
|
||||
|
||||
[ActivityProperty(Hint = "The Bcc recipients email addresses. (Optional)")]
|
||||
public string[]? Bcc { get; set; }
|
||||
public ICollection<string> Bcc { get; set; } = new List<string>();
|
||||
|
||||
[ActivityProperty(Hint = "The subject of the email message.")]
|
||||
public string? Subject { get; set; }
|
||||
|
|
@ -44,8 +48,9 @@ namespace Elsa.Activities.Email
|
|||
protected override async ValueTask<IActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext context)
|
||||
{
|
||||
var message = new MimeMessage();
|
||||
var from = From is null or "" ? _options.DefaultSender : From;
|
||||
|
||||
message.From.Add(MailboxAddress.Parse(From));
|
||||
message.From.Add(MailboxAddress.Parse(from));
|
||||
message.Subject = Subject;
|
||||
|
||||
message.Body = new TextPart(TextFormat.Html)
|
||||
|
|
@ -53,26 +58,15 @@ namespace Elsa.Activities.Email
|
|||
Text = Body
|
||||
};
|
||||
|
||||
SetRecipiensEmailAddresses(message.To, To);
|
||||
SetRecipiensEmailAddresses(message.Cc, Cc);
|
||||
SetRecipiensEmailAddresses(message.Bcc, Bcc);
|
||||
SetRecipientsEmailAddresses(message.To, To);
|
||||
SetRecipientsEmailAddresses(message.Cc, Cc);
|
||||
SetRecipientsEmailAddresses(message.Bcc, Bcc);
|
||||
|
||||
await _smtpService.SendAsync(message, context.CancellationToken);
|
||||
|
||||
return Done();
|
||||
}
|
||||
|
||||
private void SetRecipiensEmailAddresses(InternetAddressList list, string[]? addresses)
|
||||
{
|
||||
if (addresses == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < addresses.Length; i++)
|
||||
{
|
||||
list.Add(MailboxAddress.Parse(addresses[i]));
|
||||
}
|
||||
}
|
||||
private void SetRecipientsEmailAddresses(InternetAddressList list, IEnumerable<string> addresses) => list.AddRange(addresses.Select(MailboxAddress.Parse));
|
||||
}
|
||||
}
|
||||
|
|
@ -15,12 +15,12 @@ namespace Elsa.Activities.Email
|
|||
builder.SendEmail(setup => setup.WithSender(from).WithRecipient(to).WithSubject(subject).WithBody(body), lineNumber, sourceFile);
|
||||
|
||||
public static IActivityBuilder SendEmail(this IBuilder builder, string from, string[] to, string subject, string body, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
|
||||
builder.SendEmail(setup => setup.WithSender(from).WithRecipient(to).WithSubject(subject).WithBody(body), lineNumber, sourceFile);
|
||||
builder.SendEmail(setup => setup.WithSender(from).WithRecipients(to).WithSubject(subject).WithBody(body), lineNumber, sourceFile);
|
||||
|
||||
public static IActivityBuilder SendEmail(this IBuilder builder, string from, string[] to, string[] cc, string subject, string body, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
|
||||
builder.SendEmail(setup => setup.WithSender(from).WithRecipient(to).WithCcRecipient(cc).WithSubject(subject).WithBody(body), lineNumber, sourceFile);
|
||||
builder.SendEmail(setup => setup.WithSender(from).WithRecipients(to).WithCcRecipients(cc).WithSubject(subject).WithBody(body), lineNumber, sourceFile);
|
||||
|
||||
public static IActivityBuilder SendEmail(this IBuilder builder, string from, string[] to, string[] cc, string[] bcc, string subject, string body, [CallerLineNumber] int lineNumber = default,
|
||||
[CallerFilePath] string? sourceFile = default) => builder.SendEmail(setup => setup.WithSender(from).WithRecipient(to).WithCcRecipient(cc).WithBccRecipient(bcc).WithSubject(subject).WithBody(body), lineNumber, sourceFile);
|
||||
[CallerFilePath] string? sourceFile = default) => builder.SendEmail(setup => setup.WithSender(from).WithRecipients(to).WithCcRecipients(cc).WithBccRecipients(bcc).WithSubject(subject).WithBody(body), lineNumber, sourceFile);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
|
||||
using Elsa.Builders;
|
||||
using Elsa.Services.Models;
|
||||
|
||||
|
|
@ -8,38 +7,34 @@ namespace Elsa.Activities.Email
|
|||
{
|
||||
public static class SendEmailExtensions
|
||||
{
|
||||
#region sendner
|
||||
public static ISetupActivity<SendEmail> WithSender(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string> value) => activity.Set(x => x.From, value);
|
||||
public static ISetupActivity<SendEmail> WithSender(this ISetupActivity<SendEmail> activity, Func<string> value) => activity.Set(x => x.From, value);
|
||||
public static ISetupActivity<SendEmail> WithSender(this ISetupActivity<SendEmail> activity, string value) => activity.Set(x => x.From, value);
|
||||
#endregion
|
||||
#region recipient
|
||||
public static ISetupActivity<SendEmail> WithRecipient(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string[]> value) => activity.Set(x => x.To, value);
|
||||
public static ISetupActivity<SendEmail> WithRecipient(this ISetupActivity<SendEmail> activity, Func<string[]> value) => activity.Set(x => x.To, value);
|
||||
public static ISetupActivity<SendEmail> WithRecipient(this ISetupActivity<SendEmail> activity, string[] value) => activity.Set(x => x.To, value);
|
||||
|
||||
public static ISetupActivity<SendEmail> WithRecipients(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string[]> value) => activity.Set(x => x.To, value);
|
||||
public static ISetupActivity<SendEmail> WithRecipients(this ISetupActivity<SendEmail> activity, Func<string[]> value) => activity.Set(x => x.To, value);
|
||||
public static ISetupActivity<SendEmail> WithRecipients(this ISetupActivity<SendEmail> activity, string[] value) => activity.Set(x => x.To, value);
|
||||
|
||||
public static ISetupActivity<SendEmail> WithRecipient(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string> value) => activity.Set(x => x.To, context => new[] { value(context) });
|
||||
public static ISetupActivity<SendEmail> WithRecipient(this ISetupActivity<SendEmail> activity, Func<string> value) => activity.Set(x => x.To, () => new[] { value() });
|
||||
public static ISetupActivity<SendEmail> WithRecipient(this ISetupActivity<SendEmail> activity, string value) => activity.Set(x => x.To, new[] { value });
|
||||
#endregion
|
||||
#region ccRecipient
|
||||
public static ISetupActivity<SendEmail> WithCcRecipient(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string[]> value) => activity.Set(x => x.Cc, value);
|
||||
public static ISetupActivity<SendEmail> WithCcRecipient(this ISetupActivity<SendEmail> activity, Func<string[]> value) => activity.Set(x => x.Cc, value);
|
||||
|
||||
public static ISetupActivity<SendEmail> WithCcRecipients(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string[]> value) => activity.Set(x => x.Cc, value);
|
||||
public static ISetupActivity<SendEmail> WithCcRecipients(this ISetupActivity<SendEmail> activity, Func<string[]> value) => activity.Set(x => x.Cc, value);
|
||||
public static ISetupActivity<SendEmail> WithCcRecipient(this ISetupActivity<SendEmail> activity, string value) => activity.Set(x => x.Cc, new[] { value });
|
||||
public static ISetupActivity<SendEmail> WithCcRecipient(this ISetupActivity<SendEmail> activity, string[] value) => activity.Set(x => x.Cc, value);
|
||||
#endregion
|
||||
#region bccRecipient
|
||||
public static ISetupActivity<SendEmail> WithBccRecipient(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string[]> value) => activity.Set(x => x.Bcc, value);
|
||||
public static ISetupActivity<SendEmail> WithBccRecipient(this ISetupActivity<SendEmail> activity, Func<string[]> value) => activity.Set(x => x.Bcc, value);
|
||||
public static ISetupActivity<SendEmail> WithCcRecipients(this ISetupActivity<SendEmail> activity, string[] value) => activity.Set(x => x.Cc, value);
|
||||
|
||||
public static ISetupActivity<SendEmail> WithBccRecipients(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string[]> value) => activity.Set(x => x.Bcc, value);
|
||||
public static ISetupActivity<SendEmail> WithBccRecipients(this ISetupActivity<SendEmail> activity, Func<string[]> value) => activity.Set(x => x.Bcc, value);
|
||||
public static ISetupActivity<SendEmail> WithBccRecipient(this ISetupActivity<SendEmail> activity, string value) => activity.Set(x => x.Bcc, new[] { value });
|
||||
public static ISetupActivity<SendEmail> WithBccRecipient(this ISetupActivity<SendEmail> activity, string[] value) => activity.Set(x => x.Bcc, value);
|
||||
#endregion
|
||||
#region subject
|
||||
public static ISetupActivity<SendEmail> WithBccRecipients(this ISetupActivity<SendEmail> activity, string[] value) => activity.Set(x => x.Bcc, value);
|
||||
|
||||
public static ISetupActivity<SendEmail> WithSubject(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string> value) => activity.Set(x => x.Subject, value);
|
||||
public static ISetupActivity<SendEmail> WithSubject(this ISetupActivity<SendEmail> activity, Func<string> value) => activity.Set(x => x.Subject, value);
|
||||
public static ISetupActivity<SendEmail> WithSubject(this ISetupActivity<SendEmail> activity, string value) => activity.Set(x => x.Subject, value);
|
||||
#endregion
|
||||
#region body
|
||||
|
||||
public static ISetupActivity<SendEmail> WithBody(this ISetupActivity<SendEmail> activity, Func<ActivityExecutionContext, string> value) => activity.Set(x => x.Body, value);
|
||||
public static ISetupActivity<SendEmail> WithBody(this ISetupActivity<SendEmail> activity, Func<string> value) => activity.Set(x => x.Body, value);
|
||||
public static ISetupActivity<SendEmail> WithBody(this ISetupActivity<SendEmail> activity, string value) => activity.Set(x => x.Body, value);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue