GreenArrow Email Software Documentation

Sending Domains

Sending Domains is a GreenArrow Cloud feature that ties a brand’s sending identity — the RFC5322.From domain — to a complete, automatically managed DNS configuration for DKIM signing and click/open/bounce tracking.

Each Sending Domains has its own set of DNS records that must be configured prior to being used for sending. The Sending Domains UI/API interfaces indicate what records are needed, and automatically checks to see that those records are in place. These DNS records are typically CNAMEs that will not need to be updated again once configured.

Optionally, an ESP can delegate a domain’s NS record to GreenArrow and use their own domain name as the the root of the required DNS records the brand must CNAME to. This allows the ESP to have their customers CNAME to the ESP’s domain, instead of GreenArrow’s. This helps to prevent vendor lock-in.


Getting Started: Full Lifecycle

1. Create a Sending Domain

Create a Sending Domain via the API or UI, specifying at minimum the domain field.

These fields can be overridden or defaulted:

  • tracking_subdomain (defaults to trk)
  • dkim_mode (defaults to automatic)
  • dkim_selector1 (defaults to the configured default, which can be customized for ESPs)
  • dkim_selector2 (defaults to the configured default, which can be customized for ESPs)

(To customize the defaults for dkim_selector1 and dkim_selector2, please contact GreenArrow technical support.)

GreenArrow will automatically:

  • Generate a unique 12-character DNS code for the domain.
  • Compute the full set of DNS records that must be created to use this Sending Domain.

2. Retrieve the Required DNS Records

Fetch the domain’s DNS records from the API (GET /ga/api/v3/eng/sending_domains/{id}) or view them in the UI. The records returned in dns_records show exactly what must be added to your DNS zone.

Each record includes:

  • bind — the full BIND zone file syntax, ready to paste.
  • typeCNAME or TXT.
  • name — the DNS hostname.
  • value — the expected value.

The UI also offers a Copy BIND syntax button and a Download zone file button (named {domain}.conf) for your convenience.

3. Add the Records to DNS

Add the provided records to your DNS provider. GreenArrow does not require delegation of the entire domain — only the specific hostnames listed in dns_records need to be added.

4. Verify DNS

GreenArrow automatically checks DNS every 15 minutes. You can also trigger an immediate check via the UI (Recheck DNS), or via the API:

GET /ga/api/v3/eng/check_dns/{domain}?recheck_now=1

DNS lookups are performed against the domain’s authoritative nameservers directly (not a local caching resolver), and all nameservers are checked in parallel with a 10-second timeout. The response shows each record’s verified status and whether CNAME flattening was detected.

Once all wanted records are verified and no unwanted records are present, dns_verified is set to true. This is a one-way flag — it never returns to false, even if the DNS settings regress.

5. Automatic Provisioning on Verification

When dns_verified first becomes true, GreenArrow automatically creates or adopts the following records (these records may not be edited nor deleted):

  • URL Domain{tracking_subdomain}.{domain}, used for click and open tracking links.
  • Incoming Email Domain{tracking_subdomain}.{domain}, used to receive bounces. Mailboxes for return, abuse, and postmaster are created on this domain.
  • DKIM Keys — the first key generated on creation is marked as the default for the domain, making it active for signing.

6. Start Sending

Once dns_verified is true, the Sending Domain is fully operational. Email injected with a From header matching this domain will be DKIM-signed, tracked through the verified tracking domain, and have bounces routed correctly.

With the GreenArrow CloudMTA, you may not send using a RFC5322.From domain until it has been verified as a Sending Domain. Once the DNS has been verified, if the DNS regresses, you are still able to send using the RFC5322.From domain. (If this restriction is a problem, please contact GreenArrow technical support, there are some options where this restriction may be lifted.)


Fields Reference

domain

string

/

immutable

The RFC5322.From domain for this Sending Domain.

  • Must be unique (case-insensitive). Example: example.com
tracking_subdomain

string

/

immutable

/

default: "trk"

The subdomain of domain used for click/open/bounce tracking.

When a Shared Tracking Domain is assigned, this field is no longer relevant (the tracking DNS moves to the Shared Tracking Domain).

  • Must be distinct from dkim_selector1 and dkim_selector2.
shared_tracking_domain

hash

/

optional



An { id, name } object pointing to a Shared Tracking Domain. When set, click/open/bounce tracking DNS is handled by the Shared Tracking Domain instead of the per-domain tracking_subdomain. Either id or name may be provided when creating or updating.

id

integer

The ID of the Shared Tracking Domain.

name

string

The name of the Shared Tracking Domain.

track_open

boolean

/

optional

/

default: true

Whether opens are tracked for this domain. When set, this overrides the Mail Class setting.

track_click

boolean

/

optional

/

default: true

Whether clicks are tracked for this domain. When set, this overrides the Mail Class setting.

route

hash

/

optional



An { id, name } object pointing to a Route. When set, email from this domain uses this route unless overridden by an X-GreenArrow-Route header. Overrides the Mail Class setting.

id

integer

The ID of the Route.

name

string

The name of the Route.

dkim_mode

string

/

immutable

/

default: "automatic"

How DKIM keys are set up.

  • automatic — Two DKIM keys with CNAME delegation to dnsforemail.com. You add CNAME records; GreenArrow manages the TXT key records. This is the default and recommended mode.
  • txt_single — One DKIM key. You add a TXT record directly containing the public key.
  • txt_multiple — Two DKIM keys. You add two TXT records directly containing the public keys.
dkim_selector1

string

/

immutable

/

optional

The selector name for the first DKIM key. Immutable after creation. If not supplied, it is filled in with the configured default; the resulting value is always stored, so the selectors are never null.

  • Must be distinct from dkim_selector2 and tracking_subdomain.
dkim_selector2

string

/

immutable

/

optional

The selector name for the second DKIM key. Immutable after creation. If not supplied, it is filled in with the configured default; the resulting value is always stored, so the selectors are never null.

  • Must be distinct from dkim_selector1 and tracking_subdomain.
sending_enabled

boolean

/

default: true

When false, injection via this domain is prevented regardless of DNS verification status.

dkim_key_length

integer

/

immutable

/

default: 1024

The bit length for generated DKIM keys.

  • Must be 1024 or 2048.
dns_verified

boolean

/

read-only

true once all DNS records have been verified and no unwanted records are present. This is a one-way flag — it never returns to false.

dns_regression

boolean

/

read-only

true if the domain was previously verified but DNS records are no longer correct. Cleared when the records are fixed.

dns_records

array of hashes

/

read-only



Array of DNS record objects.

bind

string

BIND zone file syntax.

type

string

The DNS record type: CNAME or TXT.

name

string

The DNS hostname.

value

string

The expected record value.

The per-record verification status (verified and cname_flattening_detected) is not returned here; see the Check DNS API for verification status and forced rechecks.


DNS Records Created for Sending Domains

Tracking subdomain (when not using a Shared Tracking Domain)

{tracking_subdomain}.{domain}.  IN  CNAME  {tracking_subdomain}.{dns_code}.dnsforemail.com.

DKIM records — automatic mode

{dkim_selector1}._domainkey.{domain}.  IN  CNAME  {dkim_selector1}.{dns_code}.dnsforemail.com.
{dkim_selector2}._domainkey.{domain}.  IN  CNAME  {dkim_selector2}.{dns_code}.dnsforemail.com.

GreenArrow manages the TXT records at the CNAME targets in dnsforemail.com. This means DKIM key rotation can happen without any DNS changes on your end.

An ESP can replace dnsforemail.com with their own domain name that is NS delegated to GreenArrow’s nameservers. This helps avoid vendor lock-in. Contact GreenArrow technical support to set this up.

DKIM records — txt_single mode

{dkim_selector1}._domainkey.{domain}.  IN  TXT  "v=DKIM1; k=rsa; p={public_key}"

DKIM records — txt_multiple mode

{dkim_selector1}._domainkey.{domain}.  IN  TXT  "v=DKIM1; k=rsa; p={public_key_1}"
{dkim_selector2}._domainkey.{domain}.  IN  TXT  "v=DKIM1; k=rsa; p={public_key_2}"


How Sending Domain Settings Interact with Mail Classes

Sending Domain settings override Mail Class settings for email injected with a matching From domain, but can themselves be overridden by per-message headers. The precedence order from lowest to highest is:

  1. Mail Class — baseline settings configured on the mail class.
  2. Sending Domain
    • the tracking domain or the Shared Tracking Domain always override the MailClass’ bounce handling address and click/open tracking URL Domain.
    • track_open and track_click, if present, override the MailClass click/open tracking settings.
    • The route, if present, overrides the MailClass VirtualMTA setting.
  3. Per-message headers — The headers X-GreenArrow-Route, X-GreenArrow-Mtaid, X-GreenArrow-TrackOpens, X-GreenArrow-TrackClicks, and X-GreenArrow-Click-Tracking-Do always take highest precedence and override the Sending Domain’s route and click/open tracking settings.

This means:

  • If track_open is false on the Sending Domain, opens are not tracked for that domain even if the Mail Class has open tracking enabled.
  • If a route_id is set on the Sending Domain, that route is used for all messages from that domain — unless a message carries X-GreenArrow-Route.
  • The tracking domain for links and bounces comes from the Sending Domain (or its associated Shared Tracking Domain), not from the Mail Class URL domain.

Shared Tracking Domains

A Shared Tracking Domain allows multiple Sending Domains to share a single set of tracking infrastructure (click/open tracking links and bounce handling) rather than each having their own {tracking_subdomain}.{domain}.

When to Use a Shared Tracking Domain

Use a Shared Tracking Domain when:

  • You want all your senders’ tracking links and bounce processing email addresses to share a single branded domain (e.g. click.yourplatform.com or bounce.yourplatform.com).
  • You want to reduce the number of DNS records your senders need to configure — the tracking DNS is set up once on the Shared Tracking Domain and shared across all Sending Domains that reference it.

Setup Walkthrough

  1. Create a Shared Tracking Domain via POST /ga/api/v3/eng/shared_tracking_domains. Specify:
    • domain — the base domain (e.g. yourplatform.com).
    • url_domain — the hostname for click/open tracking links. Must be a subdomain of domain, or equal to domain. Optional; defaults to domain.
    • bounce_domain — the hostname for bounce/complaint handling. Must be a subdomain of domain, or equal to domain. Optional; defaults to domain.
  2. Add the DNS records returned in dns_records to the Shared Tracking Domain’s DNS zone. Verify via GET /ga/api/v3/eng/check_dns/{domain}?recheck_now=1.

  3. When DNS is verified, GreenArrow automatically creates a URL Domain and Incoming Email Domain for the Shared Tracking Domain.

  4. When creating Sending Domains, set the shared_tracking_domain field to point to this record. The Sending Domain’s tracking_subdomain becomes optional and the tracking DNS is handled by the Shared Tracking Domain instead.

Fields

domain

string

/

immutable

The base domain for this shared tracking setup.

  • Must be unique (case-insensitive).
url_domain

string

/

immutable

/

optional

The hostname used for click/open tracking links. If omitted, domain is used.

  • Must be a subdomain of domain, or equal to domain.
bounce_domain

string

/

immutable

/

optional

The hostname used for bounce/complaint email. If omitted, domain is used.

  • Must be a subdomain of domain, or equal to domain.
dns_verified

boolean

/

read-only

true once all DNS records are verified. One-way flag.

dns_regression

boolean

/

read-only

true if DNS was verified but is no longer correct.

dns_records

array of hashes

/

read-only

Same structure as Sending Domain dns_records.

Deletion Constraint

A Shared Tracking Domain cannot be deleted while any non-deleted Sending Domains reference it. Remove or reassign those Sending Domains first.

DNS Records Created for Shared Tracking Domains

When url_domain is a subdomain of domain:

{subdomain_part}.{domain}.  IN  CNAME  {subdomain_part}.{dns_code}.dnsforemail.com.

When url_domain equals domain (apex):

{domain}.  IN  CNAME  _root.{dns_code}.dnsforemail.com.

The same pattern applies for bounce_domain.


Copyright © 2012–2026 GreenArrow Email