Moving files using MailKit nuget package (Smtp successor) as SmtpClient has been marked as obsolete by Microsoft

This commit is contained in:
Elitsa Marinovska
2020-05-20 00:19:43 +02:00
parent 5c1bacd944
commit ea380985db
3 changed files with 43 additions and 7 deletions
@@ -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
/// <remarks>
/// We assume this is possible if either an event handler is registered or an smtp server is configured
/// </remarks>
internal static bool CanSendRequiredEmail(IGlobalSettings globalSettings) => EventHandlerRegistered || globalSettings.IsSmtpServerConfigured;
public static bool CanSendRequiredEmail(IGlobalSettings globalSettings) => EventHandlerRegistered || globalSettings.IsSmtpServerConfigured;
/// <summary>
/// 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;
}
}
}