Infrastructure

Dedicated servers and mail hosts

Dedicated sending servers, their IP addresses, and how host capacity is managed.

Where this lives. Sign in and open /settings/mail-hosts in the app.

What it does

Mail hosts, under Settings, is the console for the fleet of self-hosted machines that self-hosted mailboxes actually run on. Each host is a small VPS that carries roughly 100 mail accounts by convention, though its exact capacity is editable per host. The page is platform-admin only: anyone else who opens it sees "The mail fleet is platform-admin only" instead of the fleet.

This is a different feature from the customer-facing Dedicated Servers page at /servers, where a workspace buys its own private dedicated IPs for isolated sending. The two are connected: when a workspace's dedicated-server order needs provisioning, a platform admin fulfills it from this same page by attaching real, already-registered hosts from the fleet to that order.

Before you start

  • You need platform-admin access. There is no workspace-level setting that grants this; it is a staff role. [VERIFY: the exact role name or permission check that grants platform-admin access, beyond the 403 message shown in the UI]
  • Before registering a host here, provision the VPS itself with infra/mail-host-setup.sh, and set its PTR and A record.
  • The setup script prints a one-time MAIL_HOST_MASTER_PASSWORD. Keep it; you paste it into this console right after registering the host.

Set it up, step by step

  1. Provision the VPS with infra/mail-host-setup.sh, then point its PTR and an A record at it.
  2. On Settings → Mail hosts, under Register a host, fill in Name (for example mail-1), Hostname (for example mail-1.emailcampaign.ai), IP, and Capacity (defaults to 100), then click Register.
  3. Click Probe on the new host to confirm mail ports 25, 587, and 993 all answer.
  4. Click Set master credential, paste the MAIL_HOST_MASTER_PASSWORD the setup script printed, and click Store. Without this, reply sync only reads mailboxes whose owner opted into password retention, so replies to every other mailbox on that host never arrive.
  5. Click Activate once the host's checks look right. A newly registered host starts in provisioning and does not take mailbox assignments until it is active.
  6. To change how many accounts a host may carry, edit the number in its inline capacity field and press Enter, or click away to save. Raise capacity on a bigger box instead of registering a new host just to seat one more mailbox.
  7. When a workspace orders dedicated capacity from the Dedicated Servers page, the order appears here under Dedicated server orders · N awaiting provisioning. Select the number of unassigned active hosts the order calls for, then click Fulfill with X/Y. To turn an order down, click Reject… and give a reason, which is shown to the customer.
  8. To take a host out of service, click Drain to stop new assignments to it, then Retire once it is empty.

What you should see

The Shared capacity strip at the top shows accounts used out of total capacity across active hosts, with a count of free slots. When free capacity drops to 20 accounts or fewer, the strip turns red and warns "Capacity is tight — register another host now, before self-hosted orders start being refused." Each host row shows a status pill (active, provisioning, draining, or retired), a shared or dedicated pill depending on whether a single workspace owns it, its port check results, and, once probed, disk usage and mail queue depth. A host that fails to answer twice in a row shows unreachable ×N. Registering a host shows a toast: "Registered mail-1. Probe it, then activate once its setup checks out."

Common problems

  • "The mail fleet is platform-admin only": you are signed in but do not hold platform-admin access. This page is not reachable by workspace owners or admins.
  • "No master credential" warning on a host: shown in red under any host without one stored. Replies to its mailboxes are silently not syncing until you set one.
  • Capacity is tight: register a new host, or raise capacity on an existing one, before the next self-hosted order is automatically refused.
  • "No unassigned active hosts — register one first": shown in the orders panel when there is nothing free to fulfill a dedicated-server order with. Register or activate a host, then come back to fulfill it.
  • Fulfill button stays disabled: it only enables once the number of hosts you have checked matches the order's server count exactly.
  • Ports not all answering after Probe: the toast lists which of 25, 587, and 993 did not respond, which usually means firewall or service setup on that VPS still needs attention before activating it.

Common questions

When is self-hosting worth it?

When the fleet is large enough that per-seat costs dominate and you have someone to operate it. The cost per mailbox is the lowest of any route; the operational work, IP warm-up, blocklist monitoring, patching, reverse DNS and certificates, never stops.

Does a dedicated IP fix deliverability?

Almost never at cold email volumes. Gmail and Microsoft weigh the domain heavily, and a fresh dedicated IP has its own warm-up problem. Dedicated IPs matter at volumes far above what any one cold email mailbox sends.

Last updated September 19, 2026. Written by the team that operates the platform.

Self-Hosted Cold Email: Dedicated Servers, IPs and Host Capacity