Knowledge base

PMTA knowledge base›Block Global›Directive§ 3.3.1.34

domain-suffix

Global

What an incomplete address domain is completed with
in the configuration this is a linedomain-suffixinside the block Global
The second half of address completion

The line sets the domain the engine appends to an address whose domain consists of a single part — user@host instead of user@host.example.com.

Completion applies to addresses from the SMTP conversation — MAIL FROM and RCPT TO — and works only when completion itself is enabled: auto-qualify-domain. Its default is true.

The suffix has no default. If it is not set, completion uses the machine’s own name: on the node mail.foo.com the address user@host becomes user@host.foo.com.

The main trap is that the default is taken from a machine name you did not choose. On a rented server that name was given by the hosting provider, and addresses are completed with its domain — silently and without any error.

The second half is worse: completion is enabled by default, and with it the typo user@gmail stops being an error. It turns into an existing address — of your domain or the provider’s — and the message goes to the wrong place. No bounce, no log entry.

Hence the rule: either set the suffix deliberately, or turn completion off altogether.

What the Hub does. It does not write it — no suffix is needed: the Hub turned completion off, auto-qualify-domain no is set in the general 0/0 source since Aug 29, 2026. An incomplete address is rejected at submission as an error instead of being completed with the machine name given by the hosting provider.
Recommended values

What to set. What needs deciding is not the suffix but whether completion is needed:

Value When
turn completion off the submitting side always gives a full address — our case
your own suffix local old-style scripts submit, and addresses without a domain are legitimate
do not write it with completion on the worst option: the suffix is taken from the machine name chosen by the hosting provider

The third row is not a recommendation: that is how it was for us until Aug 29, 2026, when completion was turned off.

The purpose, the “domain consists of a single part” condition and the link to completion come from the manual, § 3.3.1.34 and § 3.3.7.73. No default is named there; the conclusion about the machine name comes from the example in § 3.3.7.73.
Example configuration
# either set the suffix deliberately, or turn completion off
domain-suffix bounce.example.com
<source 0/0>
    auto-qualify-domain true
</source>
Without the first line completion uses the machine name. Without the second it does not happen at all, and an incomplete address is rejected as an error.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
▲

Common mistakes and problems

what people get wrong and how it ends2 mistakes▶

Leaving completion on without a suffix

§ 3.3.1.34

What it costsAddresses are completed with the machine name, which on a rented server was given by the hosting provider. A typo in the domain turns into an existing address, and the message goes to the wrong place — silently.
How to spot itCompletion is on, there is no suffix line, the machine name belongs to the hosting provider.
How to do it rightEither set the suffix, or turn completion off in the source block.

Setting a suffix without turning completion off where it is not needed

our experience

What it costsThe suffix makes completion predictable, but does not cancel it. A typo still turns into an address in your domain instead of a rejection.
How to spot itAccounting contains recipients in your domain who were not in the mailing.
How to do it rightWhere the submitting side is obliged to give a full address, turn completion off.
Compatibility
PowerMTA 6.0
described in the manual of this version · platform: any
The vendor does not state the first version for every directive — there is no note here. The name also appears in the 5.0 edition of the manual.
Reference data
Syntax
domain-suffix <domain>
Values
a domain name
Applying
reload, no restart needed
Queue
will not touch what is already queued
Where to write it
Global
How many times
once in the block
Everything here comes from the manual, with the section.
Inheritance
The directive is written at the root of the configuration file and applies to the whole node: there is one suffix per instance. Completion itself is enabled in the source block and obeys its merging — that is, one half of it can be split by source, and the other cannot.
How to check on the node
Check both halves and the machine name:
grep -n '^domain-suffix\|auto-qualify-domain\|^host-name' /etc/pmta/config /etc/pmta/virtualhost.txt
hostname -f
If there is no suffix and completion is on, the last command applies — the machine name. On a rented server it was chosen by the hosting provider.
In the Hub
Cost of a mistake
safe: a wrong value breaks nothing
Scenarios
Connect a sending platform