emailsec._alignment

 1import typing
 2
 3import publicsuffixlist
 4
 5AlignmentMode = typing.Literal["relaxed", "strict"]
 6
 7
 8def is_spf_aligned(
 9    rfc5312_mail_from: str,
10    rfc5322_from: str,
11    mode: AlignmentMode = "relaxed",
12) -> bool:
13    match mode:
14        case "strict":
15            return rfc5312_mail_from.lower() == rfc5322_from.lower()
16        case "relaxed":
17            psl = publicsuffixlist.PublicSuffixList()
18            return psl.privatesuffix(rfc5312_mail_from) == psl.privatesuffix(
19                rfc5322_from
20            )
21
22
23def is_dkim_aligned(
24    dkim_domain: str,
25    rfc5322_from: str,
26    mode: AlignmentMode = "relaxed",
27) -> bool:
28    match mode:
29        case "strict":
30            return dkim_domain.lower() == rfc5322_from.lower()
31        case "relaxed":
32            psl = publicsuffixlist.PublicSuffixList()
33            return psl.privatesuffix(dkim_domain) == psl.privatesuffix(rfc5322_from)
AlignmentMode = typing.Literal['relaxed', 'strict']
def is_spf_aligned( rfc5312_mail_from: str, rfc5322_from: str, mode: Literal['relaxed', 'strict'] = 'relaxed') -> bool:
 9def is_spf_aligned(
10    rfc5312_mail_from: str,
11    rfc5322_from: str,
12    mode: AlignmentMode = "relaxed",
13) -> bool:
14    match mode:
15        case "strict":
16            return rfc5312_mail_from.lower() == rfc5322_from.lower()
17        case "relaxed":
18            psl = publicsuffixlist.PublicSuffixList()
19            return psl.privatesuffix(rfc5312_mail_from) == psl.privatesuffix(
20                rfc5322_from
21            )
def is_dkim_aligned( dkim_domain: str, rfc5322_from: str, mode: Literal['relaxed', 'strict'] = 'relaxed') -> bool:
24def is_dkim_aligned(
25    dkim_domain: str,
26    rfc5322_from: str,
27    mode: AlignmentMode = "relaxed",
28) -> bool:
29    match mode:
30        case "strict":
31            return dkim_domain.lower() == rfc5322_from.lower()
32        case "relaxed":
33            psl = publicsuffixlist.PublicSuffixList()
34            return psl.privatesuffix(dkim_domain) == psl.privatesuffix(rfc5322_from)