@Mail Domain Check

Ghost | Postmark | newsletter sender coverage

Verify the Ghost Newsletter From, Not Only the Adapter Fallback

A Postmark adapter can require fromEmail at startup and still send a different address. Ghost supplies each newsletter's configured sender as data.from; the adapter uses fromEmail only when that value is absent. Release against the serialized request, not the configuration label.

Target incident

The fallback address is verified, a Ghost newsletter supplies another From, and Postmark rejects the real send even though setup followed the README.

Separate four contracts

Effective From
The address Ghost puts in data.from for this newsletter.
Postmark coverage
A confirmed exact Sender Signature or a verified domain covering that effective address.
Message stream
Newsletter traffic should use the intended broadcast stream independently of sender verification.
Provider result
Codes 400, 401, 406, and accepted requests describe different boundaries.

Browser-local release planner

Find the first failing sender boundary

No real sender address, recipient address, Server API token, message body, subscriber list, Ghost configuration, Postmark payload, DNS value, or raw log is requested or transmitted.

What the two send paths actually do

At adapter commit f827884, #buildMessage serializes From: data.from || fromEmail. Constructor validation proves a fallback exists; it does not prove the fallback is selected on a real newsletter send.

At reviewed Ghost commit 4324cc8, SendingService.send passes from: emailRenderer.getFromAddress(post, newsletter, useFallbackAddress) to the provider. The normal newsletter setting therefore owns the effective From unless Ghost deliberately selects its fallback path.

Build coverage from active newsletters

  1. Privately inventory the effective From chosen by every active newsletter, including newsletters that override the publication default.
  2. For one address, confirm that exact Sender Signature. For several addresses under one owner-controlled domain, prefer Domain Verification.
  3. If newsletters use more than one domain, cover every domain or every outlier address. One verified domain cannot authorize another.
  4. Test the configured fromEmail separately as a fallback. Do not use that fallback test as the production newsletter release gate.

This page uses only categorical counts and states. Do not paste newsletter addresses, Postmark tokens, DNS values, subscriber data, request payloads, or raw logs.

Use the exact Postmark error class

400
Sender Signature not found. The effective request From is not covered by a signature or verified domain.
401
Sender signature not confirmed. Coverage exists but is not yet confirmed.
406
Inactive recipient. This is a recipient suppression boundary, not a sender-signature failure.

Postmark's official API error table separates these codes. Changing the sender to repair 406 can hide the real recipient state and create a second identity problem.

Keep sender identity and stream policy separate

The reviewed adapter defaults MessageStream to broadcast, which matches newsletter traffic. A covered sender can still fail a separate stream policy, and a correct broadcast stream cannot authorize an uncovered From. Record both values on one controlled request.

Minimal release gate

  1. Every active Ghost newsletter maps to one privately recorded effective From.
  2. Each effective address is covered by a confirmed Sender Signature or verified domain.
  3. The outbound request shows the intended From and MessageStream=broadcast.
  4. One consenting controlled recipient receives a test or has a precise provider outcome.
  5. A fresh receiver header proves the intended visible From and same-message DKIM or SPF alignment under DMARC.
  6. The fallback path is tested independently and is not mistaken for the normal newsletter path.
Need to inventory more than one Ghost newsletter sender?

Use the local sender inventory to count streams and domains without uploading addresses or message content.

Open local sender inventory

Primary references