104 lines
3.6 KiB
C#
104 lines
3.6 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Schnittsellenbeschreibung für einen Service der die Validierung von E-Mail Adressen ermöglicht
|
|
/// </summary>
|
|
public class EmailValidationService : IEmailValidationService
|
|
{
|
|
private readonly IDistributedCache _memoryCache;
|
|
private readonly IWebHostEnvironment _hostingEnvironment;
|
|
private readonly IOptions<EmailValidationOptions> _emailValidationOptions;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="memoryCache">Instanz eines IDistributedCache</param>
|
|
/// <param name="hostingEnvironment">Instanz eines IWebHostEnvironment</param>
|
|
/// <param name="emailValidationOptions">Instanz eines EmailValidationOptions</param>
|
|
public EmailValidationService(IDistributedCache memoryCache, IWebHostEnvironment hostingEnvironment, IOptions<EmailValidationOptions> emailValidationOptions)
|
|
{
|
|
_memoryCache = memoryCache;
|
|
_hostingEnvironment = hostingEnvironment;
|
|
_emailValidationOptions = emailValidationOptions;
|
|
Init();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initialisiert den Service
|
|
/// </summary>
|
|
private void Init()
|
|
{
|
|
var path = Path.Combine(_hostingEnvironment.WebRootPath, _emailValidationOptions.Value.File);
|
|
if (File.Exists(path))
|
|
{
|
|
var fakeMailList = new List<string>();
|
|
var allDomains = File.ReadAllLines(path, Encoding.Default);
|
|
fakeMailList.AddRange(allDomains);
|
|
//_memoryCache.Set("FakeMails", fakeMailList);
|
|
_memoryCache.SetString("FakeMails", JsonSerializer.Serialize(fakeMailList));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt zurück ob es sich bei der E-Mail Adresse um eine Wegwerfadresse handelt
|
|
/// </summary>
|
|
/// <param name="emailAddress">E-Mail Adresse die geprüft werden soll</param>
|
|
/// <returns>true wenn Wegwerf-Email, false sonst</returns>
|
|
public bool IsDisposable(string emailAddress)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(emailAddress))
|
|
return false;
|
|
|
|
var fakeMailList = new List<string>();
|
|
var json = _memoryCache.GetString("FakeMails");
|
|
if (string.IsNullOrWhiteSpace(json))
|
|
{
|
|
Init();
|
|
fakeMailList = JsonSerializer.Deserialize<List<string>>(_memoryCache.GetString("FakeMails"));
|
|
}
|
|
else
|
|
{
|
|
fakeMailList = JsonSerializer.Deserialize<List<string>>(json);
|
|
}
|
|
|
|
if (fakeMailList != null && fakeMailList.Any())
|
|
{
|
|
var mailAddress = new MailAddress(emailAddress);
|
|
return fakeMailList?.FirstOrDefault(c => c == mailAddress.Host.ToLower()) != null;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Einstellungen für den Email-Valiiderungs-Service
|
|
/// </summary>
|
|
public class EmailValidationOptions
|
|
{
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
public EmailValidationOptions()
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Datei die verwendet werden soll
|
|
/// </summary>
|
|
public string File { get; set; }
|
|
}
|
|
}
|