<source>
The default is false. With the permission the engine takes values from the X-DKIM-Options header and signs the message with them — but only if signing is configured for this message at all. The header adjusts the signature, it does not enable it.
The header syntax resembles the tags of the signature itself, separated by semicolons. Chapter 10 lists what you can control:
| Tag | What it sets | Condition |
|---|---|---|
| s | the selector, the signature’s s= tag | the declared key must have this selector |
| d | the domain, the signature’s d= tag | the key must have exactly this domain, an asterisk or a matching path in the vault |
| i | the identity, the signature’s i= tag | without d, the key must have the same domain or a parent one |
| q | the query method, the q= tag | — |
| key-list | which list to take the key from | the list must be declared |
The point is to pick one key out of several declared ones. If a domain has two keys with different selectors, the header X-DKIM-Options: s=key2 names the second.
For the second signature this method does not work: the manual stipulates this separately. The second signature is configured only with directives.
Without the permission the header is ignored and, as the section says directly, stays in the message.
The other edge of the same trap: the named selector must exist. A typo in the s tag is not “sign however it works out” but a mismatch with a condition the manual sets explicitly.
The practical consequence for us is different: if a submitting platform does set this header, the engine will neither read it nor remove it — the header will reach the recipient.
What to set. There is exactly one question — whether the submitting side chooses the key:
| Value | When |
|---|---|
| no (default) | the configuration chooses the key — by stream, domain, list |
| yes | a domain has several keys, and only the sender knows which one to take |
The second case occurs with intermediaries that sign for many clients with those clients’ keys. There process-x-dkim-key is usually needed as well.
# the header adjusts the signature only where signing is already configured <source 10.0.0.0/24> process-x-dkim-options true</source>
what people get wrong and how it ends3 mistakes▶
§ 10.3.3
§ 10.3.4
§ 3.3.7.45
3 relations
dkim-sign<domain>The third value hands the signing decision to a message header, and processing that header is enabled by this line on the source. § 3.3.7.45domain-key<domain-key-list>The list is chosen by a message header, and processing of that header is enabled by that line on the source. § 3.3.7.45A message header with which the submitting side adjusts the signatureThe line on the source without which the header is not processed at all. § 10.3.3
grep -n 'process-x-dkim-options\|domain-key' /etc/pmta/config /etc/pmta/virtualhost.txt
3 articles
◇Do not send what will fail the check at the receiverThe node checks the SPF of its own mail before sending: if it fails, it bounces the message without waiting for someone else’s refusal.◇How the node signs messages and chooses a keyThe key is chosen by the sending domain from the headers, going through the declarations from top to bottom.◇A message header with which the submitting side adjusts the signatureFive parameters in X-DKIM-Options: selector, domain, signing identity, query method and key list.