using System.Text; using System.Text.Json; using StandManager.Domain.DTO; using StandManager.Domain.Entita; using StandManager.Service.Interfaces; using StandManager.Service.Mail; namespace StandManager.Service; public class RegistrazioneMailProcessor : IMailProcessor { private readonly IManagerService _managerService; public RegistrazioneMailProcessor(IManagerService managerService) { _managerService = managerService; } public MailFrom MailFrom => MailFrom.Registrazione; public async Task ProcessAsync(List mailQueueList, EmailConfig _config, HttpClient httpClient) { var size = _config.RangeSize != 0 ? _config.RangeSize : mailQueueList.Count; foreach (var chunk in mailQueueList.Chunk(size)) { var emailTasks = chunk.Select(async mailQueue => { try { var email = new Email() { From = _config.From, Body = string.IsNullOrEmpty(mailQueue.Args) ? mailQueue.Body : string.Format(mailQueue.Body, mailQueue.Args?.Split(_config.MailSplitChar) ?? Array.Empty()), Cc = null, Subject = mailQueue.Subject, To = mailQueue.ToList.Split(";").ToList() // new() { "g.vitari@oaservice.it" } }; var messageJson = JsonSerializer.Serialize(email); // multipart using var form = new MultipartFormDataContent(); form.Add(new StringContent(messageJson, Encoding.UTF8, "application/json"), "messageJson"); //Attachments /* if (File.Exists(@"C:\temp\test.pdf")) { var fileBytes = await File.ReadAllBytesAsync(@"C:\temp\test.pdf"); var fileContent = new ByteArrayContent(fileBytes); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf"); form.Add(fileContent, "attachments", "test.pdf"); } */ var response = await httpClient.PostAsync( _config.ServerAddress, form ); response.EnsureSuccessStatusCode(); mailQueue.Sent = true; mailQueue.Error = null; return mailQueue; } catch (Exception e) { mailQueue.Sent = false; mailQueue.Error = e.Message; return mailQueue; } }); // Prendo i risultati dell'invio var results = await Task.WhenAll(emailTasks); // Salvo in blocco le entità await _managerService.MailQueueService.Salva(results.ToList()); } } }