Skip to content

Commit

Permalink
Merge commit 'feb8e6c37947b21baaa7dcf724ade0f2435a8280'
Browse files Browse the repository at this point in the history
github PR #152, also for issue #149
  • Loading branch information
mjl- committed Apr 13, 2024
2 parents 34572d1 + feb8e6c commit 1ea851b
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions queue/direct.go
Original file line number Diff line number Diff line change
Expand Up @@ -647,24 +647,30 @@ func deliverHost(log mlog.Log, resolver dns.Resolver, dialer smtpclient.Dialer,
err = fmt.Errorf("storing recipient domain tls status: %w", err)
}
}
if err != nil {

inspectError := func(err error) error {
if cerr, ok := err.(smtpclient.Error); ok {
// If we are being rejected due to policy reasons on the first
// attempt and remote has both IPv4 and IPv6, we'll give it
// another try. Our first IP may be in a block list, the address for
// the other family perhaps is not.

if cerr.Permanent && m0.Attempts == 1 && dualstack && strings.HasPrefix(cerr.Secode, "7.") {
log.Debugx("change error type from permanent to transient", err, slog.Any("host", host), slog.Any("secode", cerr.Secode))
cerr.Permanent = false
}
// If server does not implement requiretls, respond with that code. ../rfc/8689:301
if errors.Is(cerr.Err, smtpclient.ErrRequireTLSUnsupported) {
cerr.Secode = smtp.SePol7MissingReqTLS30
metricRequireTLSUnsupported.WithLabelValues("norequiretls").Inc()
}
err = cerr
return cerr
}
return deliverResult{err: err}
return err
}

if err != nil {
return deliverResult{err: inspectError(err)}
}

// SMTP session is ready. Finally try to actually deliver.
Expand Down Expand Up @@ -704,7 +710,7 @@ func deliverHost(log mlog.Log, resolver dns.Resolver, dialer smtpclient.Dialer,
resps, err := sc.DeliverMultiple(ctx, mailFrom, rcpts, size, msg, has8bit, smtputf8, m0.RequireTLS != nil && *m0.RequireTLS)
if err != nil && len(resps) == len(msgResps) {
// If error and it applies to all recipients, return a single error.
return deliverResult{err: err}
return deliverResult{err: inspectError(err)}
}
var ntodo []*msgResp
for i, mr := range todo[:n] {
Expand Down

0 comments on commit 1ea851b

Please sign in to comment.