<signals>
The service receives delivery events from the node, and opens and clicks from somewhere else. To link them into one message, a common identifier is needed, and this line names the header to take it from. There is no default.
🔴 It works only with engagement-tracking set to external. The manual says so directly: linking is required exactly where you send the open events yourself.
Length — up to 512 Latin characters. Mail merge has its own way: there the *custommessageid variable is used instead of a header.
What it is really for. Without linking, the service sees two unrelated streams: “message delivered” and “someone opened something.” Half of its conclusions are built on connecting the two, and the vendor calls linking a condition for getting full value from the analytics.
🔎 The technique itself is common and familiar: your own message identifier set in a header — the same thing we do with the header_NAME accounting field, only for the other side.
The line is needed in exactly one combination:
| Tracking | The line |
|---|---|
| external | needed: otherwise the events will not be linked |
| sparkpost | not needed: the engine links them itself |
| no | not needed |
# you send the open events — a common identifier is needed <signals> engagement-tracking external custom-message-id-header x-my-msgid</signals>
what people get wrong and how it ends1 mistake▶
§ 11.1.6.2.11
1 relation
grep -i "signals" /var/log/pmta/log | tail -20
3 articles
◇Hand a message to a webhook instead of a receiverThe queue sends the message as a POST request in the form of a JSON object; only a 2xx response counts as success.◇The node can insert pixels and rewrite links by itselfIn the vendor’s tracking mode the engine parses outgoing HTML, rewrites links to the tracking domain and inserts open pixels — with a choice of what to do if the markup cannot be parsed.◇Markup parsing and editingOpen and click tracking in sparkpost mode edits the message markup with the built-in gumbo-parser; by default a message whose markup could not be parsed is bounced.