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:
| Field | Meaning |
|---|---|
ipv4 | The IPv4 source address. Required and validated as a real IPv4. |
ipv6 | An optional IPv6 address, stored for reference. |
hostname | The EHLO / reverse-DNS name you intend the address to present. |
priority | Selection 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:
| Order | Source | When it applies |
|---|---|---|
| 1 | The stream's IP pool | The message has a stream and that stream sets a pool. |
| 2 | The server's IP pool | Otherwise, and the server sets a pool. |
| 3 | The host default address | Neither 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.
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.
# 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:
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:
PATCH /api/v2/server/streams/{permalink}
{ "ip_pool_id": 42 }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.
| Concern | Status |
|---|---|
| Source IP selection (stream pool, server pool, host default) | Enforced by the worker |
| Binding the outgoing connection to the chosen pool address | Enforced |
| DKIM signing of authenticated domains at delivery | Enforced |
| Suppression gate before send; auto-suppress on bounce or complaint | Enforced |
| Broadcast opt-in gate and one-click unsubscribe handling | Enforced |
| SPF / DMARC record publication and alignment | Your DNS; CamelMailer checks and monitors |
| Reverse DNS (PTR) for each pool IP | Your network provider; not verified by the product |
| IP warmup pacing | Operational; you control the volume ramp, the product does not throttle |
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.