From 9d4487396b041140574f145bd59231e9604afbc8 Mon Sep 17 00:00:00 2001 From: Marcel Baumgartner Date: Fri, 21 Apr 2023 18:20:15 +0200 Subject: [PATCH] Switched from internal smtp client to MailKit. Added ssl config and improved mail service --- Moonlight/App/Services/MailService.cs | 34 ++++++++++++-------- Moonlight/Moonlight.csproj | 1 + Moonlight/defaultstorage/configs/config.json | 7 +++- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Moonlight/App/Services/MailService.cs b/Moonlight/App/Services/MailService.cs index 26764603..9bcab325 100644 --- a/Moonlight/App/Services/MailService.cs +++ b/Moonlight/App/Services/MailService.cs @@ -1,9 +1,11 @@ using System.Net; using System.Net.Mail; using Logging.Net; +using MimeKit; using Moonlight.App.Database.Entities; using Moonlight.App.Exceptions; using Moonlight.App.Helpers; +using SmtpClient = MailKit.Net.Smtp.SmtpClient; namespace Moonlight.App.Services; @@ -13,6 +15,7 @@ public class MailService private readonly string Password; private readonly string Email; private readonly int Port; + private readonly bool Ssl; public MailService(ConfigService configService) { @@ -24,6 +27,7 @@ public class MailService Password = mailConfig.GetValue("Password"); Email = mailConfig.GetValue("Email"); Port = mailConfig.GetValue("Port"); + Ssl = mailConfig.GetValue("Ssl"); } public async Task SendMail( @@ -54,20 +58,24 @@ public class MailService { using var client = new SmtpClient(); - client.Host = Server; - client.Port = Port; - client.EnableSsl = true; - client.Credentials = new NetworkCredential(Email, Password); - - await client.SendMailAsync(new MailMessage() + var mailMessage = new MimeMessage(); + mailMessage.From.Add(new MailboxAddress(Email, Email)); + mailMessage.To.Add(new MailboxAddress(user.Email, user.Email)); + mailMessage.Subject = $"Hey {user.FirstName}, there are news from moonlight"; + + var body = new BodyBuilder { - From = new MailAddress(Email), - Sender = new MailAddress(Email), - Body = parsed, - IsBodyHtml = true, - Subject = $"Hey {user.FirstName}, there are news from moonlight", - To = { new MailAddress(user.Email) } - }); + HtmlBody = parsed + }; + mailMessage.Body = body.ToMessageBody(); + + using (var smtpClient = new SmtpClient()) + { + await smtpClient.ConnectAsync(Server, Port, Ssl); + await smtpClient.AuthenticateAsync(Email, Password); + await smtpClient.SendAsync(mailMessage); + await smtpClient.DisconnectAsync(true); + } } catch (Exception e) { diff --git a/Moonlight/Moonlight.csproj b/Moonlight/Moonlight.csproj index 5c375652..a0d9713d 100644 --- a/Moonlight/Moonlight.csproj +++ b/Moonlight/Moonlight.csproj @@ -24,6 +24,7 @@ + diff --git a/Moonlight/defaultstorage/configs/config.json b/Moonlight/defaultstorage/configs/config.json index 6e9ff6dd..b0a2a22b 100644 --- a/Moonlight/defaultstorage/configs/config.json +++ b/Moonlight/defaultstorage/configs/config.json @@ -57,7 +57,8 @@ "Email": "no-reply@mycoolproject.de", "Server": "mycoolproject.de", "Password": "s3cr3t", - "Port": 25 + "Port": 465, + "Ssl": true }, "Cleanup": { "Cpu": 90, @@ -73,6 +74,10 @@ "Enable": false, "Url": "" } + }, + "DiscordNotifications": { + "Enable": false, + "WebHook": "" } } } \ No newline at end of file