From a943636905771270355154a7e13bb1f57006dc99 Mon Sep 17 00:00:00 2001 From: Qstick Date: Wed, 13 Jan 2021 19:58:22 -0500 Subject: [PATCH] New: Replace SmtpClient with Mailkit Closes #1891 (cherry picked from commit 579c4433494a848aa75abb09d78af7e98ebb96a6) --- src/NzbDrone.Core/Lidarr.Core.csproj | 1 + .../Notifications/Email/EmailService.cs | 43 ++++++++++--------- .../Notifications/Email/EmailSettings.cs | 3 -- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index 064328a00..6c0937b68 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -11,6 +11,7 @@ + diff --git a/src/NzbDrone.Core/Notifications/Email/EmailService.cs b/src/NzbDrone.Core/Notifications/Email/EmailService.cs index 0585e76f6..a9f195cb0 100644 --- a/src/NzbDrone.Core/Notifications/Email/EmailService.cs +++ b/src/NzbDrone.Core/Notifications/Email/EmailService.cs @@ -1,7 +1,8 @@ -using System; -using System.Net; -using System.Net.Mail; +using System; +using System.Linq; using FluentValidation.Results; +using MailKit.Net.Smtp; +using MimeKit; using NLog; namespace NzbDrone.Core.Notifications.Email @@ -23,25 +24,20 @@ namespace NzbDrone.Core.Notifications.Email public void SendEmail(EmailSettings settings, string subject, string body, bool htmlBody = false) { - var email = new MailMessage(); - email.From = new MailAddress(settings.From); + var email = new MimeMessage(); + email.From.Add(MailboxAddress.Parse(settings.From)); - email.To.Add(settings.To); + email.To.Add(MailboxAddress.Parse(settings.To)); email.Subject = subject; - email.Body = body; - email.IsBodyHtml = htmlBody; - - NetworkCredential credentials = null; - - if (!string.IsNullOrWhiteSpace(settings.Username)) + email.Body = new TextPart(htmlBody ? "html" : "plain") { - credentials = new NetworkCredential(settings.Username, settings.Password); - } + Text = body + }; try { - Send(email, settings.Server, settings.Port, settings.Ssl, credentials); + Send(email, settings); } catch (Exception ex) { @@ -51,13 +47,20 @@ namespace NzbDrone.Core.Notifications.Email } } - private void Send(MailMessage email, string server, int port, bool ssl, NetworkCredential credentials) + private void Send(MimeMessage email, EmailSettings settings) { - var smtp = new SmtpClient(server, port); - smtp.EnableSsl = ssl; - smtp.Credentials = credentials; + using (var client = new SmtpClient()) + { + client.Connect(settings.Server, settings.Port); + + if (!string.IsNullOrWhiteSpace(settings.Username)) + { + client.Authenticate(settings.Username, settings.Password); + } - smtp.Send(email); + client.Send(email); + client.Disconnect(true); + } } public ValidationFailure Test(EmailSettings settings) diff --git a/src/NzbDrone.Core/Notifications/Email/EmailSettings.cs b/src/NzbDrone.Core/Notifications/Email/EmailSettings.cs index 23ee56f41..5ec3e008c 100644 --- a/src/NzbDrone.Core/Notifications/Email/EmailSettings.cs +++ b/src/NzbDrone.Core/Notifications/Email/EmailSettings.cs @@ -31,9 +31,6 @@ namespace NzbDrone.Core.Notifications.Email [FieldDefinition(1, Label = "Port")] public int Port { get; set; } - [FieldDefinition(2, Label = "SSL", Type = FieldType.Checkbox)] - public bool Ssl { get; set; } - [FieldDefinition(3, Label = "Username", Privacy = PrivacyLevel.UserName)] public string Username { get; set; }