From 623a3c49b12acaf19214d19ae30bcf6711e85fbf Mon Sep 17 00:00:00 2001 From: ivanszabo Date: Thu, 10 Apr 2025 19:04:59 +0200 Subject: [PATCH] =?UTF-8?q?MailKit-tel=20email=20k=C3=BCld=C3=A9se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SyncController.cs | 44 +++++++++++++++--- .../WorkFlowCheck.API.csproj | 1 + src/WorkFlowCheck.API/appsettings.json | 7 +++ src/WorkFlowCheck.BL/Infra/DIConfig.cs | 1 + src/WorkFlowCheck.BL/Models/EmailSettings.cs | 17 +++++++ .../Services/Interfaces/IMessageService.cs | 13 ++++++ .../Services/MessageService.cs | 46 +++++++++++++++++++ src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj | 1 + 8 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 src/WorkFlowCheck.BL/Models/EmailSettings.cs create mode 100644 src/WorkFlowCheck.BL/Services/Interfaces/IMessageService.cs create mode 100644 src/WorkFlowCheck.BL/Services/MessageService.cs diff --git a/src/WorkFlowCheck.API/Controllers/SyncController.cs b/src/WorkFlowCheck.API/Controllers/SyncController.cs index 57d2f19..10edd21 100644 --- a/src/WorkFlowCheck.API/Controllers/SyncController.cs +++ b/src/WorkFlowCheck.API/Controllers/SyncController.cs @@ -14,11 +14,17 @@ namespace WorkFlowCheck.API.Controllers public class SyncController : ControllerBase { private ISyncService _syncService; - private INumberGeneratorService _numberGeneratorService; - public SyncController(ISyncService syncService,INumberGeneratorService numberGeneratorService) + private INumberGeneratorService _numberGeneratorService; + private IMessageService _messageService; + + + public SyncController(ISyncService syncService, + INumberGeneratorService numberGeneratorService, + IMessageService messageService) { _syncService = syncService; - _numberGeneratorService = numberGeneratorService; + _numberGeneratorService = numberGeneratorService; + _messageService = messageService; } @@ -412,7 +418,7 @@ namespace WorkFlowCheck.API.Controllers return retVal; } - + [HttpPost("DeviceMessageSend")] public async Task> DeviceMessageSend([FromBody] DeviceMessageDTO deviceMessageDTO) { @@ -480,9 +486,9 @@ namespace WorkFlowCheck.API.Controllers var fileBytes = await System.IO.File.ReadAllBytesAsync(filePath); var fileType = "application/octet-stream"; - + Response.Headers.Add("Content-Length", fileBytes.Length.ToString()); - + return File(fileBytes, fileType, fileName); } catch (Exception ex) @@ -490,5 +496,31 @@ namespace WorkFlowCheck.API.Controllers return StatusCode(500, $"Error: {ex.Message}"); } } + + [HttpGet("SendTestMail")] + public async Task> SendTestMail() + { + var retVal = new ApiResponseDTO() + { + IsSuccess = true + }; + + try + { + var result = await _messageService.SendMailAsync( + new List() + { + "ivan.szabo.sis@gmail.com", + }, "Teszt", "Ok"); + retVal.Data = true; + } + catch (Exception ex) + { + retVal.IsSuccess = false; + retVal.Errors.Add(ex.Message); + Log.Error(ex.Message); + } + return retVal; + } } } diff --git a/src/WorkFlowCheck.API/WorkFlowCheck.API.csproj b/src/WorkFlowCheck.API/WorkFlowCheck.API.csproj index 3f03379..741e280 100644 --- a/src/WorkFlowCheck.API/WorkFlowCheck.API.csproj +++ b/src/WorkFlowCheck.API/WorkFlowCheck.API.csproj @@ -17,6 +17,7 @@ + all diff --git a/src/WorkFlowCheck.API/appsettings.json b/src/WorkFlowCheck.API/appsettings.json index c49f487..69b2754 100644 --- a/src/WorkFlowCheck.API/appsettings.json +++ b/src/WorkFlowCheck.API/appsettings.json @@ -37,5 +37,12 @@ "Url": "http://localhost:8660" } } + }, + "EmailSettings": { + "SmtpServer": "smtp.gmail.com", + "SmtpPort": 587, + "Username": "nuvolarsetup@gmail.com", + "Password": "reiq pgfr nxub pvrb", + "SenderName": "Nuvolar System" } } diff --git a/src/WorkFlowCheck.BL/Infra/DIConfig.cs b/src/WorkFlowCheck.BL/Infra/DIConfig.cs index 422649c..ffaedfa 100644 --- a/src/WorkFlowCheck.BL/Infra/DIConfig.cs +++ b/src/WorkFlowCheck.BL/Infra/DIConfig.cs @@ -17,6 +17,7 @@ namespace WorkFlowCheck.BL.Infra service.AddScoped(); service.AddScoped(); service.AddScoped(); + service.AddScoped(); } } } diff --git a/src/WorkFlowCheck.BL/Models/EmailSettings.cs b/src/WorkFlowCheck.BL/Models/EmailSettings.cs new file mode 100644 index 0000000..1c334ce --- /dev/null +++ b/src/WorkFlowCheck.BL/Models/EmailSettings.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WorkFlowCheck.BL.Models +{ + public class EmailSettings + { + public string SmtpServer { get; set; } = string.Empty; + public int SmtpPort { get; set; } + public string Username { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; + public string SenderName { get; set; } = string.Empty; + } +} diff --git a/src/WorkFlowCheck.BL/Services/Interfaces/IMessageService.cs b/src/WorkFlowCheck.BL/Services/Interfaces/IMessageService.cs new file mode 100644 index 0000000..4e9775b --- /dev/null +++ b/src/WorkFlowCheck.BL/Services/Interfaces/IMessageService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WorkFlowCheck.BL.Services.Interfaces +{ + public interface IMessageService + { + Task SendMailAsync(List recipients, string subject, string htmlBody); + } +} diff --git a/src/WorkFlowCheck.BL/Services/MessageService.cs b/src/WorkFlowCheck.BL/Services/MessageService.cs new file mode 100644 index 0000000..b4a38b8 --- /dev/null +++ b/src/WorkFlowCheck.BL/Services/MessageService.cs @@ -0,0 +1,46 @@ +using MailKit.Net.Smtp; +using MailKit.Security; +using MimeKit; +using Microsoft.Extensions.Configuration; +using WorkFlowCheck.BL.Models; +using WorkFlowCheck.BL.Services.Interfaces; + +namespace WorkFlowCheck.BL.Services +{ + public class MessageService : IMessageService + { + private readonly EmailSettings _settings; + + public MessageService(IConfiguration configuration) + { + _settings = configuration.GetSection("EmailSettings").Get()!; + } + + public async Task SendMailAsync(List recipients, string subject, string htmlBody) + { + var message = new MimeMessage(); + message.From.Add(new MailboxAddress(_settings.SenderName, _settings.Username)); + + foreach (var recipient in recipients) + { + message.To.Add(MailboxAddress.Parse(recipient)); + } + + message.Subject = subject; + + message.Body = new TextPart("html") + { + Text = htmlBody + }; + + using var smtp = new SmtpClient(); + await smtp.ConnectAsync(_settings.SmtpServer, _settings.SmtpPort, SecureSocketOptions.StartTls); + await smtp.AuthenticateAsync(_settings.Username, _settings.Password); + await smtp.SendAsync(message); + await smtp.DisconnectAsync(true); + + return true; + } + } + +} diff --git a/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj b/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj index 08827ad..be4021a 100644 --- a/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj +++ b/src/WorkFlowCheck.BL/WorkFlowCheck.BL.csproj @@ -9,6 +9,7 @@ +