Product · Evidence chain
Six facts per message. Each with its own record.
This page walks the full chain: from the byte stream that goes over the wire to the proof bundle a third party checks without connecting to mailack.
System under construction. We are working with pilot customers.
The six facts, per message.
Each fact has its own record, captured at the moment it happens. No record, no claim.
Exact content
What the message said, byte by byte. The hash is computed over the canonical byte stream that went over the wire.
hash · canonical byte stream
Instant of issuance
When it was issued. Date is fixed before hashing, and the batch root is sealed with the PSC with sealed_at.
fixed Date · sealed_at
Acceptance on delivery
The message was accepted for delivery. The literal SMTP response from that conversation is kept, with the queue id assigned.
250 2.0.0 · queue id
Delivery or rejection
The outcome. The RFC 3464 DSN arrives via the return-path and is archived raw, before parsing.
RFC 3464 · VERP return-path
Integrity over time
The evidence has not changed since sealing. WORM preservation and an inclusion proof against the sealed root.
WORM · inclusion proof
Verifiability by third parties
Any third party checks the canonical hash and the inclusion proof on their own, offline, with the CLI. The certificate itself is backed by the PSC that issued it.
mailack-verify · no network
Two captures per delivery, at two different moments.
Acceptance and outcome are separate facts. They are recorded separately, and neither replaces the other.
At the moment: the literal SMTP response
mailack-dispatcher preserves the exact line with which the message was accepted on delivery, including the queue id assigned. Not a translated code: the line itself.
>>> MAIL FROM:<bounce+9f2c1e7a-…@mailack.com>
<<< 250 2.1.0 Ok
>>> RCPT TO:<user@domain.com>
<<< 250 2.1.5 Ok
>>> DATA
<<< 354 End data with <CR><LF>.<CR><LF>
>>> .
<<< 250 2.0.0 Ok: queued as 4bK9Qz3Yx1zAfterwards: the raw RFC 3464 message
The outcome arrives later, via the VERP return-path. mailack-collector archives the .eml whole before parsing it and correlates it with its originating message.
Reporting-MTA: dns; mail-out-01.mailack.comArrival-Date: Wed, 29 Jul 2026 11:04:14 -0600Final-Recipient: rfc822; user@domain.comAction: deliveredStatus: 2.0.0Remote-MTA: dns; mx.domain.comDiagnostic-Code: smtp; 250 OK queue id 4bK9Qz3Yx1zRaw evidence exactly as archived, before parsing. The original .eml is preserved in WORM storage; what you see is its literal content.
What went over the wire is what gets hashed. Nothing else.
Message-ID and Date are fixed before hashing. From that point the byte stream is final: the MIME is never re-serialized.
If a byte changes, the hash changes. That is why the message is fixed first and hashed second, over the exact byte stream that goes over the wire.
One tree per window. One certificate per root.
Hashes enter an RFC 6962 Merkle tree in windows of one hour or ten thousand leaves. mailack-sealer seals the root with the PSC; each message keeps its inclusion proof.
Sealing the root covers every leaf in the window: the inclusion proof connects each message to the sealed root. For litigation, an individual certificate for the message is also issued on demand.
Preserved in WORM. Verified without a network.
Evidence is kept in Object Storage with retention and bucket lock. The proof bundle is verified with the CLI, without querying mailack.
What the proof bundle carries
- Canonical hash of the message
- Inclusion path up to the root
- Batch root
- NOM-151 certificate from the PSC
WORM preservation
GET /v1/messages/{id}/proof-bundle
./bin/mailack-verify bundle.json -eml mensaje.emlThe CLI recomputes the hash of the .eml and rebuilds the inclusion path up to the sealed root, with no network and no dependence on mailack. The certificate is checked against the PSC that issued it.
Data residency and evidentiary value are not the same thing.
Both matter. Each answers a different question, and they are not interchangeable.
The Mexican IP evidences where from
Mail leaves from OCI mx-monterrey-1 with a fixed egress IP and its own HELO. That evidences where it is sent from and where the evidence resides. It is a contractual and regulatory argument. It is not proof of the message.
The NOM-151 certificate evidences what and when
Evidentiary value comes exclusively from the NOM-151 preservation certificate issued by the PSC over the tree root. It is what a third party checks during verification.
See the full chain with a message of yours.
In the demo: the send, both captures and the offline verification of the proof bundle.