<source>
The default is false. A header with an empty value — x-virtual-mta: and nothing after it — is treated as an invalid stream choice and so falls under the general rule: the message is rejected unless the “fallback stream plus lifted rejection” pair is configured.
With the value yes an empty header is accepted, and the message leaves via the default stream — the one assigned to the source by the default-virtual-mta directive.
What to set. The decision depends on whose submission it is:
| Value | When | What you pay |
|---|---|---|
| no (default) | the submission is ours, we set the header | nothing: an empty value is an error, and it is visible |
| yes | a third-party platform always sends the header | an empty value stops being noticeable |
If you enable it, make sure default-virtual-mta is set sensibly for this source: it is the one that will receive such messages.
# a third-party platform always sets the header, sometimes empty <source 10.0.0.0/24> process-x-virtual-mta yes allow-empty-x-virtual-mta yes default-virtual-mta mta-hub-pool </source>
what people get wrong and how it ends2 mistakes▶
our experience
§ 3.3.7.67
1 relation
grep -n -B5 allow-empty-x-virtual-mta /etc/pmta/config
3 articles
◇How a message gets into the engineSix described submission methods: extended SMTP, four language bindings and a directory the node watches on disk.◇Who is allowed to submit mail and for whom to accept itOut of the box, the node accepts submission only from the machine itself; two different questions — “who can send through us” and “for whose addresses we accept mail” — are answered by different directives.◇Headers the sender uses to control deliverySix control headers let the submitting side choose a stream, tag a message with a job, set signing options and the key, the envelope identifier and the schedule; each is allowed separately and per source.