Deliverability & IP pools

Whether your mail reaches the inbox is mostly decided at the receiving end, by the reputation mailbox providers attach to your sending IPs. IP pools are the lever CamelMailer gives you over that reputation: choose which IP a message leaves from, and keep transactional mail on addresses your campaigns never touch.

IP pools

An IP pool is a named set of sending IP addresses. Pools and their addresses are installation-wide configuration. Each address in a pool carries these fields:

FieldMeaning
ipv4The IPv4 source address. Required and validated as a real IPv4.
ipv6An optional IPv6 address, stored for reference.
hostnameThe EHLO / reverse-DNS name you intend the address to present.
prioritySelection order within the pool. A lower number wins; the default is 100.

Two things can be assigned a pool:

  • A serverhas an optional default pool. Every message the server sends uses this pool unless the message's stream overrides it.
  • A message streamhas an optional pool of its own. When set, it overrides the server pool for that stream's mail. See Message streams.

This pairing is the point. Put transactional mail on the server's default pool and give your broadcast stream its own pool, and the two reputations rise and fall independently. A marketing blast that draws complaints drags down whatever IP sent it, so keeping password resets and receipts on a separate pool protects them at the moment they matter most. Assigning a distinct pool to a broadcast stream is the single most effective isolation step CamelMailer offers.

How the worker picks a source address

At delivery time the worker asks the store for one source address. It walks three levels and takes the first that resolves:

OrderSourceWhen it applies
1The stream's IP poolThe message has a stream and that stream sets a pool.
2The server's IP poolOtherwise, and the server sets a pool.
3The host default addressNeither pool resolves to an address.

The store expresses this as a single coalesce of the stream pool over the server pool, so a message with no stream, an unknown stream, or a stream that leaves its pool blank all fall through to the server pool. A transactional stream that never sets a pool resolves to exactly the server-pool address the worker used before per-stream pools existed.

Within the chosen pool the worker takes the highest-priority address: the lowest prioritynumber first, ties broken by insertion order. It binds the outgoing SMTP socket to that address, so the connection reaches the recipient from that IP. When no pool resolves, the worker sends from the host's default outbound address and the operating system picks the source IP as it would for any connection.

Source binding uses the ipv4 value only. The ipv6 field is stored for reference, so an IPv6 you record on an address does not become the source of the connection.

Assigning pools

Pools live under Admin → IP pools in the dashboard and under the /api/v2/admin/ip_pools management API. Create a pool, add addresses to it, then point a server or a stream at it. Add several addresses to one pool and the lowest priority number is preferred, so you can order primary and backup IPs.

terminal
# Create a pool, then add an address to it
POST /api/v2/admin/ip_pools
  { "name": "Broadcast", "default": false }

POST /api/v2/admin/ip_pools/{pool_id}/ip_addresses
  { "ipv4": "203.0.113.20", "hostname": "bcast1.example.com", "priority": 100 }

Set a server's default pool from the server's settings, or clear it with a null id to return the server to the host default address:

terminal
POST /api/v2/admin/organizations/{org}/servers/{server}/ip_pool
  { "ip_pool_id": 42 }

A stream's pool is set in the dashboard from the stream's Edit dialog, where Server default poolmeans the stream sets no pool of its own and inherits the server's. Over the API it is a field of the stream update on the per-server surface. Send a null id to detach the stream and fall back to the server pool:

terminal
PATCH /api/v2/server/streams/{permalink}
  { "ip_pool_id": 42 }
A pool can be flagged default, but that flag is only a label in the admin UI. Source resolution reads the pool a server or stream is assigned, so assign a pool explicitly for it to take effect.

Deliverability checklist

Pools decide which IP mail leaves from. Whether that IP is trusted depends on the habits below.

  • Authenticate every sending domain. SPF, DKIM, and DMARC let a receiver tie your mail to your domain and trust it. CamelMailer signs outbound mail with DKIM at delivery and can verify your published records. Set each domain up and keep it green: Sending domains covers publication and per-domain keys.
  • Keep the recipient list clean. Sending to addresses that bounce or complain is the fastest way to lose reputation. CamelMailer holds any message to a suppressed recipient before it reaches the wire and grows the list automatically from hard bounces and complaints. Review it and keep bad addresses out: Suppressions.
  • Require opt-in for broadcast. Broadcast mail carries obligations transactional mail does not. CamelMailer gates broadcast sends on a per-stream opt-in and wires up one-click unsubscribe, so an unsubscribe or complaint suppresses that recipient for the next campaign. Lean on this rather than mailing anyone who has not agreed to hear from you. See Broadcast streams.
  • Warm up new IPs. A brand-new IP has no reputation, and providers throttle unknown senders that suddenly push volume. Start a new pool with a low daily volume of your most engaged recipients and raise it over days to weeks, watching your DMARC pass rate and bounce and complaint figures. You run this schedule by controlling how much you send through the new pool.
  • Publish matching reverse DNS.Receivers expect the sending IP to have a PTR record that resolves back, and they check the EHLO name your server presents. Set the reverse DNS for each pool address at your network provider and set the installation's EHLO identity to a name that matches.

What CamelMailer enforces vs operational advice

A green dashboard does not by itself guarantee inbox placement. Here is where the product acts and where the work stays with you.

ConcernStatus
Source IP selection (stream pool, server pool, host default)Enforced by the worker
Binding the outgoing connection to the chosen pool addressEnforced
DKIM signing of authenticated domains at deliveryEnforced
Suppression gate before send; auto-suppress on bounce or complaintEnforced
Broadcast opt-in gate and one-click unsubscribe handlingEnforced
SPF / DMARC record publication and alignmentYour DNS; CamelMailer checks and monitors
Reverse DNS (PTR) for each pool IPYour network provider; not verified by the product
IP warmup pacingOperational; you control the volume ramp, the product does not throttle
Two honesty notes on the edges. The EHLO / HELO name is a single installation-level config value, so the per-address hostname field records your intent for an IP but does not drive what the server announces. And source binding uses the ipv4 value, so a stored ipv6 is reference only. Earning and holding the reputation on your IPs is the ongoing job that pools are built to protect.