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; }
}
}