diff --git a/src/Umbraco.Core/Events/SendEmailEventArgs.cs b/src/Umbraco.Infrastructure/Events/SendEmailEventArgs.cs
similarity index 100%
rename from src/Umbraco.Core/Events/SendEmailEventArgs.cs
rename to src/Umbraco.Infrastructure/Events/SendEmailEventArgs.cs
diff --git a/src/Umbraco.Core/EmailSender.cs b/src/Umbraco.Infrastructure/Users/EmailSender.cs
similarity index 58%
rename from src/Umbraco.Core/EmailSender.cs
rename to src/Umbraco.Infrastructure/Users/EmailSender.cs
index 5cfdd765bc..62c45b8f78 100644
--- a/src/Umbraco.Core/EmailSender.cs
+++ b/src/Umbraco.Infrastructure/Users/EmailSender.cs
@@ -1,9 +1,12 @@
using System;
using System.Net.Mail;
using System.Threading.Tasks;
-using Umbraco.Core.Composing;
+using MailKit.Security;
+using MimeKit;
+using MimeKit.Text;
using Umbraco.Core.Configuration;
using Umbraco.Core.Events;
+using SmtpClient = MailKit.Net.Smtp.SmtpClient;
namespace Umbraco.Core
{
@@ -21,7 +24,7 @@ namespace Umbraco.Core
{
}
- internal EmailSender(IGlobalSettings globalSettings, bool enableEvents)
+ public EmailSender(IGlobalSettings globalSettings, bool enableEvents)
{
_globalSettings = globalSettings;
_enableEvents = enableEvents;
@@ -45,7 +48,9 @@ namespace Umbraco.Core
{
using (var client = new SmtpClient())
{
- client.Send(message);
+ client.Connect(_globalSettings.SmtpSettings.Host, _globalSettings.SmtpSettings.Port);
+ client.Send(ConstructEmailMessage(message));
+ client.Disconnect(true);
}
}
}
@@ -65,14 +70,21 @@ namespace Umbraco.Core
{
using (var client = new SmtpClient())
{
- if (client.DeliveryMethod == SmtpDeliveryMethod.Network)
+ var appSettingsDeliveryMethod = _globalSettings.SmtpSettings.DeliveryMethod;
+ var deliveryMethod = (SmtpDeliveryMethod)Enum.Parse(typeof(SmtpDeliveryMethod), appSettingsDeliveryMethod, true);
+
+ await client.ConnectAsync(_globalSettings.SmtpSettings.Host, _globalSettings.SmtpSettings.Port);
+
+ if (deliveryMethod == SmtpDeliveryMethod.Network)
{
- await client.SendMailAsync(message);
+ await client.SendAsync(ConstructEmailMessage(message));
}
else
{
- client.Send(message);
+ client.Send(ConstructEmailMessage(message));
}
+
+ await client.DisconnectAsync(true);
}
}
}
@@ -83,7 +95,7 @@ namespace Umbraco.Core
///
/// We assume this is possible if either an event handler is registered or an smtp server is configured
///
- internal static bool CanSendRequiredEmail(IGlobalSettings globalSettings) => EventHandlerRegistered || globalSettings.IsSmtpServerConfigured;
+ public static bool CanSendRequiredEmail(IGlobalSettings globalSettings) => EventHandlerRegistered || globalSettings.IsSmtpServerConfigured;
///
/// returns true if an event handler has been registered
@@ -103,5 +115,29 @@ namespace Umbraco.Core
var handler = SendEmail;
if (handler != null) handler(null, e);
}
+
+ private MimeMessage ConstructEmailMessage(MailMessage mailMessage)
+ {
+ var messageToSend = new MimeMessage
+ {
+ Subject = mailMessage.Subject
+ };
+
+ var fromEmail = mailMessage.From?.Address;
+ if(string.IsNullOrEmpty(fromEmail))
+ fromEmail = _globalSettings.SmtpSettings.From;
+
+ messageToSend.From.Add(new MailboxAddress(fromEmail));
+
+ foreach (var mailAddress in mailMessage.To)
+ messageToSend.To.Add(new MailboxAddress(mailAddress.Address));
+
+ if (mailMessage.IsBodyHtml)
+ messageToSend.Body = new TextPart(TextFormat.Html) { Text = mailMessage.Body };
+ else
+ messageToSend.Body = new TextPart(TextFormat.Plain) { Text = mailMessage.Body };
+
+ return messageToSend;
+ }
}
}
diff --git a/src/Umbraco.Core/IEmailSender.cs b/src/Umbraco.Infrastructure/Users/IEmailSender.cs
similarity index 100%
rename from src/Umbraco.Core/IEmailSender.cs
rename to src/Umbraco.Infrastructure/Users/IEmailSender.cs