How Do I Receive Inbound Mail and Process OOB Bounces and FBLs?
KumoMTA is a relay: by default it accepts mail from relay_hosts and relays it out, but it will not accept inbound mail for a domain unless you tell it to. Use the listener_domains helper to declare which domains may be relayed to, and which should be treated as bounce or feedback processors:
# listener_domains.toml
["example.com"]
# accept and queue inbound mail addressed to example.com
relay_to = true
["bounce.example.com"]
# accept, log, and discard OOB (out-of-band) bounce reports
log_oob = "LogThenDrop"
["fbl.example.com"]
# accept, log, and discard ARF feedback-loop reports
log_arf = "LogThenDrop"
OOB / ARF modes
log_oob and log_arf accept a string mode: Ignore, LogThenDrop, or LogThenRelay.
Warning
Use the string value log_oob = "LogThenDrop", not the boolean true. The boolean form logs and relays the report, which is rarely what you want and is a common cause of OOB loops.
Routing inbound mail onward
Because your MX points at KumoMTA, a normal MX lookup for a relay_to domain returns KumoMTA itself. To avoid a mail loop, set a routing domain that points at the real mailbox host:
A note on DSNs
KumoMTA logs bounces rather than generating DSN/NDR emails. If you specifically need to emit an RFC 3464 report, use generate_rfc3464_message; otherwise integrate via the logs and webhooks.