From 745b6d22a9abccadb6fe32f24767040b1f84d86d Mon Sep 17 00:00:00 2001 From: Daniel Hafner Date: Thu, 4 Feb 2021 21:26:26 +0100 Subject: [PATCH] SmtpSender added --- Massmailer.Shared/Class1.cs | 8 ---- Massmailer.Shared/IMailer.cs | 13 +++++++ Massmailer.Shared/Logic/Mailer.cs | 44 ++++++++++++++++++++++ Massmailer.Shared/Massmailer.Shared.csproj | 6 ++- Massmailer.Shared/Model/SmtpSettings.cs | 25 ++++++++++++ Massmailer.UI/Massmailer.UI.csproj | 2 +- 6 files changed, 88 insertions(+), 10 deletions(-) delete mode 100644 Massmailer.Shared/Class1.cs create mode 100644 Massmailer.Shared/IMailer.cs create mode 100644 Massmailer.Shared/Logic/Mailer.cs create mode 100644 Massmailer.Shared/Model/SmtpSettings.cs diff --git a/Massmailer.Shared/Class1.cs b/Massmailer.Shared/Class1.cs deleted file mode 100644 index 5f84109..0000000 --- a/Massmailer.Shared/Class1.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace Massmailer.Shared -{ - public class Class1 - { - } -} diff --git a/Massmailer.Shared/IMailer.cs b/Massmailer.Shared/IMailer.cs new file mode 100644 index 0000000..47fdc9f --- /dev/null +++ b/Massmailer.Shared/IMailer.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Massmailer.Shared +{ + public interface IMailer + { + Task SendMailAsync(string email, string subject, string body); + } +} diff --git a/Massmailer.Shared/Logic/Mailer.cs b/Massmailer.Shared/Logic/Mailer.cs new file mode 100644 index 0000000..f7ec320 --- /dev/null +++ b/Massmailer.Shared/Logic/Mailer.cs @@ -0,0 +1,44 @@ +using MailKit.Net.Smtp; +using Massmailer.Shared.Model; +using MimeKit; +using System; +using System.Threading.Tasks; + +namespace Massmailer.Shared.Logic +{ + public class Mailer : IMailer + { + private readonly SmtpSettings smtpSettings; + + public Mailer(SmtpSettings smtpSettings) + { + this.smtpSettings = smtpSettings; + } + + public async Task SendMailAsync(string email, string subject, string body) + { + try + { + var message = new MimeMessage(); + message.From.Add(new MailboxAddress(this.smtpSettings.SenderName, this.smtpSettings.SenderEmail)); + message.To.Add(new MailboxAddress(email, email)); + message.Subject = subject; + message.Body = new TextPart("html") { Text = body }; + + using (var client = new SmtpClient()) + { + client.ServerCertificateValidationCallback = (s, c, h, e) => true; + + await client.ConnectAsync(this.smtpSettings.Server, this.smtpSettings.Port, this.smtpSettings.UseSsl); + await client.AuthenticateAsync(this.smtpSettings.Username, this.smtpSettings.Password); + await client.SendAsync(message); + await client.DisconnectAsync(true); + } + } + catch (Exception ex) + { + throw new InvalidOperationException(ex.Message); + } + } + } +} diff --git a/Massmailer.Shared/Massmailer.Shared.csproj b/Massmailer.Shared/Massmailer.Shared.csproj index f208d30..0165452 100644 --- a/Massmailer.Shared/Massmailer.Shared.csproj +++ b/Massmailer.Shared/Massmailer.Shared.csproj @@ -1,7 +1,11 @@ - + net5.0 + + + + diff --git a/Massmailer.Shared/Model/SmtpSettings.cs b/Massmailer.Shared/Model/SmtpSettings.cs new file mode 100644 index 0000000..715bbd3 --- /dev/null +++ b/Massmailer.Shared/Model/SmtpSettings.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Massmailer.Shared.Model +{ + public class SmtpSettings + { + public string Server { get; set; } + + public int Port { get; set; } + + public string SenderName { get; set; } + + public string SenderEmail { get; set; } + + public string Username { get; set; } + + public string Password { get; set; } + + public bool UseSsl { get; set; } + } +} diff --git a/Massmailer.UI/Massmailer.UI.csproj b/Massmailer.UI/Massmailer.UI.csproj index a58967a..07b623a 100644 --- a/Massmailer.UI/Massmailer.UI.csproj +++ b/Massmailer.UI/Massmailer.UI.csproj @@ -1,4 +1,4 @@ - + WinExe