34 lines
1.4 KiB
C#
34 lines
1.4 KiB
C#
namespace MijnBesluit.Application.Models;
|
|
|
|
/// <summary>
|
|
/// Maakt het <c>Message-ID</c> 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
|
|
/// <c>550-5.7.1 Messages missing a valid Message-ID header are not accepted</c> - 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.
|
|
/// </summary>
|
|
public static class Berichtkenmerk
|
|
{
|
|
/// <summary>Maakt een nieuw Message-ID op basis van het afzenderadres.</summary>
|
|
public static string Nieuw(string? afzenderAdres)
|
|
{
|
|
var domein = Domein(afzenderAdres);
|
|
return $"<{Guid.NewGuid():N}.{DateTime.UtcNow:yyyyMMddHHmmss}@{domein}>";
|
|
}
|
|
|
|
/// <summary>Het deel achter het apenstaartje, of een vervanger als het adres niet deugt.</summary>
|
|
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;
|
|
}
|
|
}
|