diff --git a/src/Correo.Application/CommandHandlers/SendEmailHandler.cs b/src/Correo.Application/CommandHandlers/SendEmailHandler.cs index 96422c1..5edf359 100644 --- a/src/Correo.Application/CommandHandlers/SendEmailHandler.cs +++ b/src/Correo.Application/CommandHandlers/SendEmailHandler.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Correo.Application.Extensions; using Correo.Domain.Models; using Correo.PublishedLanguage.Commands; using Correo.PublishedLanguage.Events; @@ -35,6 +36,8 @@ namespace Correo.Application.CommandHandlers if (emailMessage.From == null) emailMessage.From = new EmailMessage.MailAddress(_defaultSender.Value.Address, _defaultSender.Value.Name); + emailMessage.Validate(); + // send email } catch (Exception ex) diff --git a/src/Correo.Application/Extensions/ValidationExtensions.cs b/src/Correo.Application/Extensions/ValidationExtensions.cs new file mode 100644 index 0000000..cc05b92 --- /dev/null +++ b/src/Correo.Application/Extensions/ValidationExtensions.cs @@ -0,0 +1,37 @@ +using Correo.Application.Utils; +using Correo.Domain.Models; +using System; +using System.Linq; + +namespace Correo.Application.Extensions +{ + internal static class ValidationExtensions + { + public static void Validate(this EmailMessage emailMessage) + { + if (string.IsNullOrEmpty(emailMessage.Subject)) + throw new Exception("Subject is missing."); + + if (string.IsNullOrEmpty(emailMessage.Body)) + throw new Exception("Body is missing."); + + if (string.IsNullOrEmpty(emailMessage.From.Address)) + throw new Exception("'From' address is missing."); + + if (!Validations.IsEmail(emailMessage.From.Address)) + throw new Exception($"'From' email address '{emailMessage.From.Address}' is not valid."); + + if (emailMessage.To.Count() == 0) + throw new Exception("'To' addresses are empty."); + + if (emailMessage.To.Any(z => !Validations.IsEmail(z.Address))) + throw new Exception("There are invalid email addresses in 'To' list."); + + if (emailMessage.Cc.Any(z => !Validations.IsEmail(z.Address))) + throw new Exception("There are invalid email addresses in 'Cc' list."); + + if (emailMessage.Bcc.Any(z => !Validations.IsEmail(z.Address))) + throw new Exception("There are invalid email addresses in 'Bcc' list."); + } + } +} diff --git a/src/Correo.Application/Utils/Validations.cs b/src/Correo.Application/Utils/Validations.cs new file mode 100644 index 0000000..2d87883 --- /dev/null +++ b/src/Correo.Application/Utils/Validations.cs @@ -0,0 +1,15 @@ +using System.Text.RegularExpressions; + +namespace Correo.Application.Utils +{ + internal static class Validations + { + public static bool IsEmail(string email) + { + var pattern = @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*" + "@" + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$"; + var reg = new Regex(pattern); + var valid = reg.IsMatch(email); + return valid; + } + } +}