From 1aa21f9980d7236854695c05d4a6b6b05b8e7439 Mon Sep 17 00:00:00 2001 From: "DESKTOP-T0O5CDB\\DESK-555BD" Date: Thu, 25 Apr 2024 10:45:55 -0600 Subject: [PATCH] Uprgade from .NET SMTPClient to MailKit as the default smtpclient does not support modern protocols. --- CarCareTracker.csproj | 1 + Controllers/VehicleController.cs | 4 +++ Helper/MailHelper.cs | 51 +++++++++++++++++--------------- README.md | 17 ++++++----- Views/Home/_Settings.cshtml | 1 + 5 files changed, 42 insertions(+), 32 deletions(-) diff --git a/CarCareTracker.csproj b/CarCareTracker.csproj index 5d63a6b8..7d3b2d7e 100644 --- a/CarCareTracker.csproj +++ b/CarCareTracker.csproj @@ -13,6 +13,7 @@ + diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 1be83058..039b8737 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -1153,6 +1153,10 @@ public IActionResult GetReportPartialView(int vehicleId) { numbersArray.Add(upgradeRecords.Min(x => x.Date.Year)); } + if (odometerRecords.Any()) + { + numbersArray.Add(odometerRecords.Min(x => x.Date.Year)); + } var minYear = numbersArray.Any() ? numbersArray.Min() : DateTime.Now.AddYears(-5).Year; var yearDifference = DateTime.Now.Year - minYear + 1; for (int i = 0; i < yearDifference; i++) diff --git a/Helper/MailHelper.cs b/Helper/MailHelper.cs index a2e2cb53..c126ae85 100644 --- a/Helper/MailHelper.cs +++ b/Helper/MailHelper.cs @@ -1,6 +1,6 @@ using CarCareTracker.Models; -using System.Net.Mail; -using System.Net; +using MimeKit; +using MailKit.Net.Smtp; namespace CarCareTracker.Helper { @@ -15,13 +15,16 @@ public class MailHelper : IMailHelper { private readonly MailConfig mailConfig; private readonly IFileHelper _fileHelper; + private readonly ILogger _logger; public MailHelper( IConfiguration config, - IFileHelper fileHelper + IFileHelper fileHelper, + ILogger logger ) { //load mailConfig from Configuration mailConfig = config.GetSection("MailConfig").Get(); _fileHelper = fileHelper; + _logger = logger; } public OperationResponse NotifyUserForRegistration(string emailAddress, string token) { @@ -118,7 +121,7 @@ public OperationResponse NotifyUserForReminders(Vehicle vehicle, List em { foreach (string emailAddress in emailAddresses) { - SendEmail(emailAddress, emailSubject, emailBody, true, true); + SendEmail(emailAddress, emailSubject, emailBody); } return new OperationResponse { Success = true, Message = "Email Sent!" }; } catch (Exception ex) @@ -126,33 +129,33 @@ public OperationResponse NotifyUserForReminders(Vehicle vehicle, List em return new OperationResponse { Success = false, Message = ex.Message }; } } - private bool SendEmail(string emailTo, string emailSubject, string emailBody, bool isBodyHtml = false, bool useAsync = false) { - string to = emailTo; + private bool SendEmail(string emailTo, string emailSubject, string emailBody) { string from = mailConfig.EmailFrom; var server = mailConfig.EmailServer; - MailMessage message = new MailMessage(from, to); + var message = new MimeMessage(); + message.From.Add(new MailboxAddress(from, from)); + message.To.Add(new MailboxAddress(emailTo, emailTo)); message.Subject = emailSubject; - message.Body = emailBody; - message.IsBodyHtml = isBodyHtml; - SmtpClient client = new SmtpClient(server); - client.EnableSsl = mailConfig.UseSSL; - client.Port = mailConfig.Port; - client.Credentials = new NetworkCredential(mailConfig.Username, mailConfig.Password); - try + + var builder = new BodyBuilder(); + + builder.HtmlBody = emailBody; + + message.Body = builder.ToMessageBody(); + + using (var client = new SmtpClient()) { - if (useAsync) - { - client.SendMailAsync(message, new CancellationToken()); - } - else + client.Connect(server, mailConfig.Port, MailKit.Security.SecureSocketOptions.Auto); + client.Authenticate(mailConfig.Username, mailConfig.Password); + try { client.Send(message); + return true; + } catch (Exception ex) + { + _logger.LogError(ex.Message); + return false; } - return true; - } - catch (Exception ex) - { - return false; } } } diff --git a/README.md b/README.md index 1a907aa9..66644fb4 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,15 @@ Read this [Getting Started Guide](https://docs.lubelogger.com/Getting%20Started) [Search Existing Issues](https://github.com/hargata/lubelog/issues) ## Dependencies -- Bootstrap -- LiteDB -- Npgsql -- Bootstrap-DatePicker -- SweetAlert2 -- CsvHelper -- Chart.js -- Drawdown +- [Bootstrap](https://github.com/twbs/bootstrap) +- [LiteDB](https://github.com/mbdavid/litedb) +- [Npgsql](https://github.com/npgsql/npgsql) +- [Bootstrap-DatePicker](https://github.com/uxsolutions/bootstrap-datepicker) +- [SweetAlert2](https://github.com/sweetalert2/sweetalert2) +- [CsvHelper](https://github.com/JoshClose/CsvHelper) +- [Chart.js](https://github.com/chartjs/Chart.js) +- [Drawdown](https://github.com/adamvleggett/drawdown) +- [MailKit](https://github.com/jstedfast/MailKit) ## License LubeLogger utilizes a dual-licensing model, see [License](/LICENSE) for more information diff --git a/Views/Home/_Settings.cshtml b/Views/Home/_Settings.cshtml index b9162e1f..afa6e2a5 100644 --- a/Views/Home/_Settings.cshtml +++ b/Views/Home/_Settings.cshtml @@ -247,6 +247,7 @@
  • CsvHelper
  • Chart.js
  • Drawdown
  • +
  • MailKit