add "Fail" transport, that immediately fails delivery

allows configs that prevent outgoing deliveries (globally, per domain,
or per account) from/to certain domains.

for issue #347
This commit is contained in:
Mechiel Lukkien
2025-05-15 17:59:49 +02:00
parent 91bfff220e
commit bb438488c5
7 changed files with 123 additions and 4 deletions

View File

@ -1528,6 +1528,18 @@ func deliver(log mlog.Log, resolver dns.Resolver, m0 Msg) {
qlog.Debug("delivering to single recipient", slog.Any("msgid", m0.ID), slog.Any("recipient", m0.Recipient()))
}
// Test for "Fail" transport before Localserve.
if transport.Fail != nil {
err := smtpclient.Error{
Permanent: transport.Fail.Code/100 == 5,
Code: transport.Fail.Code,
Secode: smtp.SePol7Other0,
Err: fmt.Errorf("%s", transport.Fail.Message),
}
failMsgsDB(qlog, msgs, msgs[0].DialedIPs, backoff, dsn.NameIP{}, err)
return
}
if Localserve {
deliverLocalserve(ctx, qlog, msgs, backoff)
return