From 4d748c83714cd861f7d329ea28738f69fb247546 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 17 Feb 2021 21:40:50 +0100 Subject: [PATCH] Small SendEmail API enhancements --- .../Activities/SendEmail/SendEmail.cs | 38 ++++++++---------- .../SendEmail/SendEmailBuilderExtensions.cs | 6 +-- .../SendEmail/SendEmailExtensions.cs | 39 ++++++++----------- 3 files changed, 36 insertions(+), 47 deletions(-) diff --git a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs index 79310ac1b..10e454a90 100644 --- a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs +++ b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmail.cs @@ -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 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 To { get; set; } = new List(); [ActivityProperty(Hint = "The cc recipients email addresses. (Optional)")] - public string[]? Cc { get; set; } + public ICollection Cc { get; set; } = new List(); [ActivityProperty(Hint = "The Bcc recipients email addresses. (Optional)")] - public string[]? Bcc { get; set; } + public ICollection Bcc { get; set; } = new List(); [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 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 addresses) => list.AddRange(addresses.Select(MailboxAddress.Parse)); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs index 5157fa31c..896d5d02c 100644 --- a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailBuilderExtensions.cs @@ -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); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs index b4eb6bf4c..624a3b6c0 100644 --- a/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs +++ b/src/activities/Elsa.Activities.Email/Activities/SendEmail/SendEmailExtensions.cs @@ -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 WithSender(this ISetupActivity activity, Func value) => activity.Set(x => x.From, value); public static ISetupActivity WithSender(this ISetupActivity activity, Func value) => activity.Set(x => x.From, value); public static ISetupActivity WithSender(this ISetupActivity activity, string value) => activity.Set(x => x.From, value); - #endregion - #region recipient - public static ISetupActivity WithRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.To, value); - public static ISetupActivity WithRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.To, value); - public static ISetupActivity WithRecipient(this ISetupActivity activity, string[] value) => activity.Set(x => x.To, value); + + public static ISetupActivity WithRecipients(this ISetupActivity activity, Func value) => activity.Set(x => x.To, value); + public static ISetupActivity WithRecipients(this ISetupActivity activity, Func value) => activity.Set(x => x.To, value); + public static ISetupActivity WithRecipients(this ISetupActivity activity, string[] value) => activity.Set(x => x.To, value); + + public static ISetupActivity WithRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.To, context => new[] { value(context) }); + public static ISetupActivity WithRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.To, () => new[] { value() }); public static ISetupActivity WithRecipient(this ISetupActivity activity, string value) => activity.Set(x => x.To, new[] { value }); - #endregion - #region ccRecipient - public static ISetupActivity WithCcRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.Cc, value); - public static ISetupActivity WithCcRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.Cc, value); + + public static ISetupActivity WithCcRecipients(this ISetupActivity activity, Func value) => activity.Set(x => x.Cc, value); + public static ISetupActivity WithCcRecipients(this ISetupActivity activity, Func value) => activity.Set(x => x.Cc, value); public static ISetupActivity WithCcRecipient(this ISetupActivity activity, string value) => activity.Set(x => x.Cc, new[] { value }); - public static ISetupActivity WithCcRecipient(this ISetupActivity activity, string[] value) => activity.Set(x => x.Cc, value); - #endregion - #region bccRecipient - public static ISetupActivity WithBccRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.Bcc, value); - public static ISetupActivity WithBccRecipient(this ISetupActivity activity, Func value) => activity.Set(x => x.Bcc, value); + public static ISetupActivity WithCcRecipients(this ISetupActivity activity, string[] value) => activity.Set(x => x.Cc, value); + + public static ISetupActivity WithBccRecipients(this ISetupActivity activity, Func value) => activity.Set(x => x.Bcc, value); + public static ISetupActivity WithBccRecipients(this ISetupActivity activity, Func value) => activity.Set(x => x.Bcc, value); public static ISetupActivity WithBccRecipient(this ISetupActivity activity, string value) => activity.Set(x => x.Bcc, new[] { value }); - public static ISetupActivity WithBccRecipient(this ISetupActivity activity, string[] value) => activity.Set(x => x.Bcc, value); - #endregion - #region subject + public static ISetupActivity WithBccRecipients(this ISetupActivity activity, string[] value) => activity.Set(x => x.Bcc, value); + public static ISetupActivity WithSubject(this ISetupActivity activity, Func value) => activity.Set(x => x.Subject, value); public static ISetupActivity WithSubject(this ISetupActivity activity, Func value) => activity.Set(x => x.Subject, value); public static ISetupActivity WithSubject(this ISetupActivity activity, string value) => activity.Set(x => x.Subject, value); - #endregion - #region body + public static ISetupActivity WithBody(this ISetupActivity activity, Func value) => activity.Set(x => x.Body, value); public static ISetupActivity WithBody(this ISetupActivity activity, Func value) => activity.Set(x => x.Body, value); public static ISetupActivity WithBody(this ISetupActivity activity, string value) => activity.Set(x => x.Body, value); - #endregion } } \ No newline at end of file