The task. A node whose MX listener accepts bounces and complaints for the domains it sends from.
What it is made of:
The parts have different scopes. The processors are blocks of their own, and the SPF check belongs to the source and follows source merging.
How they interact. The manual names the forwarding dependency directly: forward-unmatched-to works only with deliver-unmatched-email true. The rejection defaults are described separately, and the trap arises at the junction: by enabling check-spf-inbound for authenticity, you also enable rejection based on the check results — reject-spf-check-fail and reject-spf-check-temperror are true by default.
Processor and check lines:
| Line | Default | What to set |
|---|---|---|
| deliver-matched-email, both processors | false | leave false |
| deliver-unmatched-email | true if there is no forward-unmatched-to | true and a mailbox someone reads |
| check-spf-inbound | false | true, but with a decision about rejections |
| reject-spf-check-fail, reject-spf-check-temperror | true | set explicitly |
<bounce-processor> deliver-matched-email no deliver-unmatched-email yes forward-unmatched-to bounces-review@example.com <address-list> address /^bounce@bounce\./ </address-list> </bounce-processor>
grep -n -A6 '<bounce-processor\|<feedback-loop-processor' /etc/pmta/config