namespace MijnBesluit.Application.Models;
///
/// Maakt het Message-ID van een uitgaande e-mail.
///
/// Waarom dit er is: .NET zet zelf geen Message-ID op een bericht. Veel mailservers vullen die
/// dan aan, maar niet allemaal. Gmail weigert sinds kort alles zonder geldige Message-ID met
/// 550-5.7.1 Messages missing a valid Message-ID header are not accepted - en dan komt er
/// dus geen enkele inlogcode aan bij iemand met een gmail-adres.
///
/// De vorm is die uit RFC 5322: iets unieks, een apenstaartje, en een domein dat van jou is.
///
public static class Berichtkenmerk
{
/// Maakt een nieuw Message-ID op basis van het afzenderadres.
public static string Nieuw(string? afzenderAdres)
{
var domein = Domein(afzenderAdres);
return $"<{Guid.NewGuid():N}.{DateTime.UtcNow:yyyyMMddHHmmss}@{domein}>";
}
/// Het deel achter het apenstaartje, of een vervanger als het adres niet deugt.
public static string Domein(string? adres)
{
if (string.IsNullOrWhiteSpace(adres)) return "mijnbesluit.nl";
var apenstaartje = adres.LastIndexOf('@');
if (apenstaartje < 0 || apenstaartje == adres.Length - 1) return "mijnbesluit.nl";
var domein = adres[(apenstaartje + 1)..].Trim().Trim('>').ToLowerInvariant();
return string.IsNullOrWhiteSpace(domein) ? "mijnbesluit.nl" : domein;
}
}