using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Mail; using System.Text; using System.Text.Json; using gehGassi.Core.Interfaces; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Options; namespace gehGassi.Core.Services { /// /// Schnittsellenbeschreibung für einen Service der die Validierung von E-Mail Adressen ermöglicht /// public class EmailValidationService : IEmailValidationService { private readonly IDistributedCache _memoryCache; private readonly IWebHostEnvironment _hostingEnvironment; private readonly IOptions _emailValidationOptions; /// /// Erstellt eine Instanz /// /// Instanz eines IDistributedCache /// Instanz eines IWebHostEnvironment /// Instanz eines EmailValidationOptions public EmailValidationService(IDistributedCache memoryCache, IWebHostEnvironment hostingEnvironment, IOptions emailValidationOptions) { _memoryCache = memoryCache; _hostingEnvironment = hostingEnvironment; _emailValidationOptions = emailValidationOptions; Init(); } /// /// Initialisiert den Service /// private void Init() { var path = Path.Combine(_hostingEnvironment.WebRootPath, _emailValidationOptions.Value.File); if (File.Exists(path)) { var fakeMailList = new List(); var allDomains = File.ReadAllLines(path, Encoding.Default); fakeMailList.AddRange(allDomains); //_memoryCache.Set("FakeMails", fakeMailList); _memoryCache.SetString("FakeMails", JsonSerializer.Serialize(fakeMailList)); } } /// /// Gibt zurück ob es sich bei der E-Mail Adresse um eine Wegwerfadresse handelt /// /// E-Mail Adresse die geprüft werden soll /// true wenn Wegwerf-Email, false sonst public bool IsDisposable(string emailAddress) { if (string.IsNullOrWhiteSpace(emailAddress)) return false; var fakeMailList = new List(); var json = _memoryCache.GetString("FakeMails"); if (string.IsNullOrWhiteSpace(json)) { Init(); fakeMailList = JsonSerializer.Deserialize>(_memoryCache.GetString("FakeMails")); } else { fakeMailList = JsonSerializer.Deserialize>(json); } if (fakeMailList != null && fakeMailList.Any()) { var mailAddress = new MailAddress(emailAddress); return fakeMailList?.FirstOrDefault(c => c == mailAddress.Host.ToLower()) != null; } return false; } } /// /// Einstellungen für den Email-Valiiderungs-Service /// public class EmailValidationOptions { /// /// Erstellt eine Instanz /// public EmailValidationOptions() { } /// /// Datei die verwendet werden soll /// public string File { get; set; } } }