when message is delivered, save whether it is from a mailing list; in webmail, show if message was a forward or mailing list, and don't enable requiretls when sending to a list.

This commit is contained in:
Mechiel Lukkien
2023-11-02 20:03:47 +01:00
parent 481a25f294
commit 0200e539a9
9 changed files with 47 additions and 20 deletions

View File

@ -68,6 +68,18 @@ const (
reasonIPrev = "iprev" // No or mild junk reputation signals, and bad iprev.
)
func isListDomain(d delivery, ld dns.Domain) bool {
if d.m.MailFromValidated && ld.Name() == d.m.MailFromDomain {
return true
}
for _, r := range d.dkimResults {
if r.Status == dkim.StatusPass && r.Sig.Domain == ld {
return true
}
}
return false
}
func analyze(ctx context.Context, log *mlog.Log, resolver dns.Resolver, d delivery) analysis {
mailbox := d.rcptAcc.destination.Mailbox
if mailbox == "" {
@ -81,16 +93,11 @@ func analyze(ctx context.Context, log *mlog.Log, resolver dns.Resolver, d delive
mailbox = rs.Mailbox
}
if rs != nil && !rs.ListAllowDNSDomain.IsZero() {
ld := rs.ListAllowDNSDomain
// todo: on temporary failures, reject temporarily?
if d.m.MailFromValidated && ld.Name() == d.m.MailFromDomain {
if isListDomain(d, rs.ListAllowDNSDomain) {
d.m.IsMailingList = true
return analysis{accept: true, mailbox: mailbox, reason: reasonListAllow, dmarcOverrideReason: string(dmarcrpt.PolicyOverrideMailingList)}
}
for _, r := range d.dkimResults {
if r.Status == dkim.StatusPass && r.Sig.Domain == ld {
return analysis{accept: true, mailbox: mailbox, reason: reasonListAllow, dmarcOverrideReason: string(dmarcrpt.PolicyOverrideMailingList)}
}
}
}
var dmarcOverrideReason string