[{"data":1,"prerenderedAt":172},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-postal-smtp-platform-on-a-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-postal-smtp-platform-on-a-vps-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":119,"ctaBody":120,"ctaButton":121,"ctaUrl":122,"relatedPosts":123},445,"self-host-postal-smtp-platform-on-a-vps",{"fr":12,"en":10,"ar":13,"es":14},"postal-smtp-platform-self-hosted-vps","postal-على-vps-منصة-smtp-مستضافة-للوكالات","postal-plataforma-smtp-autoalojada-para-agencias-en-vps","Postal: self-hosted SMTP platform for agencies","Deploy Postal on a VPS to manage transactional and marketing email across your entire client portfolio: web UI, queues, bounce tracking and per-domain stats.",9,0,false,"2026-10-15T00:00:00+00:00","2026-10-16T01:57:35+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},11,"Business Email","emails","bg-cyan-500\u002F10 text-cyan-400",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fpostal-smtp-platform-self-hosted-vps-poster.svg","A client complains that order confirmation emails are disappearing, another sees their invoices landing in spam — and you have no logs to understand what happened. Postfix does its job silently, but that is precisely the problem: it is a blind relay, with no interface, no statistics, no bounce management. Postal changes the equation. It is a complete SMTP platform — multi-user web interface, REST API, bounce webhooks, per-domain statistics and per-server analytics — that you deploy on a single VPS to manage your entire agency client portfolio, without depending on Mailgun, Postmark or SendGrid.",[34,38,49,52,77,80,84,87,116],{"type":35,"title":36,"body":37},"h2","Why agencies need a proper SMTP platform","Running client email delivery with Postfix alone means flying blind. The MTA delivers or rejects, but it won't tell you why a bounce occurred, which campaign degraded a domain's reputation, or which client is consuming the most sending resources.\n\nFor an agency managing 10, 20 or 50 client domains, that opacity is a direct operational risk. A single misconfigured client can trigger a blacklisting of the shared IP and penalise the entire portfolio. And when the client calls to report a problem, you have nothing to show them.\n\nPostal solves this by adding a full control layer on top of the SMTP pipeline.",{"type":39,"title":40,"items":41},"ul","What Postal brings to your agency",[42,43,44,45,46,47,48],"**Multi-server web interface**: create an isolated sending server per client or per project, each with its own SMTP credentials and API key.","**Per-domain statistics**: delivery rate, bounces, deliverability and sending volume — per sending domain, per period, exportable.","**Real-time bounce management**: every returned message is recorded, categorised (hard\u002Fsoft), viewable in the interface and dispatched via webhook to your application.","**REST API and webhooks**: integrate Postal with your CRM, e-commerce platform or invoicing tool — one sending endpoint, events in return.","**Message queues**: sends are queued and traceable through to delivery receipt or final error, with no black box.","**Client isolation**: each Postal server has its own IP pools, its own reputation and its own limits — one client in difficulty does not affect the others.","**MIT licence**: open source, no per-email cost, no third-party vendor dependency.",{"type":35,"title":50,"body":51},"Prerequisites: VPS, port 25 and dedicated IPv4","Postal v3.3.7 installs via Docker. The official prerequisites are:\n\n**Resources**: at least 2 vCPU and 4 GB of RAM. For volumes above 50,000 emails per day, 8 GB is recommended. Allow at least 25 GB of SSD storage — message logs can grow quickly depending on your configured retention period.\n\n**Operating system**: Ubuntu 22.04 or Ubuntu 24.04 LTS with Docker Engine and the Docker Compose plugin.\n\n**Database**: MariaDB 10.6 or higher. MySQL is explicitly not supported. The `innodb_log_file_size` parameter must be set to at least 10 times the maximum message size.\n\n**Port 25**: the critical point. Outbound port 25 must be open for Postal to deliver messages to recipient servers. Many cloud providers block it by default — confirm your VPS has a dedicated IPv4 and that port 25 is unblocked before starting installation.\n\n**rDNS**: the reverse DNS of your IPv4 must point to your Postal hostname (e.g. `postal.your-agency.com`). A missing or incorrect PTR record is the leading cause of rejection by major mail providers.",{"type":53,"title":54,"steps":55},"steps","Installing Postal on a VPS",[56,59,62,65,68,71,74],{"title":57,"body":58},"Prepare the server and install Docker","Log in as root on your Ubuntu 24.04 VPS, update packages, then install Docker Engine and the Compose plugin:\n\n```bash\napt update && apt upgrade -y\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\ndocker --version && docker compose version\n```\n\nVerify that outbound port 25 is open: `nc -zv smtp.gmail.com 25`. If the connection fails, contact your hosting provider to unblock it.",{"title":60,"body":61},"Configure DNS for your Postal server","Before bootstrapping, create DNS records for your Postal installation domain (e.g. `postal.your-agency.com`):\n\n- **A record**: `postal.your-agency.com` → VPS IP\n- **rDNS** (PTR): configure this in your control panel so your IP resolves back to `postal.your-agency.com`\n- **SPF** for the infrastructure domain: `v=spf1 ip4:\u003CVPS_IP> ~all`\n\nWait for DNS propagation (15 to 30 minutes) before proceeding.",{"title":63,"body":64},"Bootstrap the Postal configuration","Pull the Postal image and run bootstrap to generate configuration files:\n\n```bash\ndocker pull ghcr.io\u002Fpostalserver\u002Fpostal:latest\nmkdir -p \u002Fopt\u002Fpostal\u002Fconfig\ndocker run --rm -v \u002Fopt\u002Fpostal\u002Fconfig:\u002Fconfig \\\n  ghcr.io\u002Fpostalserver\u002Fpostal:latest \\\n  postal bootstrap postal.your-agency.com\n```\n\nThis generates `\u002Fopt\u002Fpostal\u002Fconfig\u002Fpostal.yml` and `signing.key`. Open `postal.yml` and fill in the MariaDB credentials, notification SMTP and the public URL of your installation.",{"title":66,"body":67},"Start MariaDB and initialise the database","Launch a dedicated MariaDB container (or use an existing instance), then initialise the Postal schema:\n\n```bash\ndocker run -d --name postal-mariadb \\\n  -e MYSQL_ROOT_PASSWORD=\u003Cpassword> \\\n  -e MYSQL_DATABASE=postal \\\n  --restart always mariadb:10.11\n\ndocker run --rm -v \u002Fopt\u002Fpostal\u002Fconfig:\u002Fconfig \\\n  --network host \\\n  ghcr.io\u002Fpostalserver\u002Fpostal:latest \\\n  postal initialize\n```",{"title":69,"body":70},"Create the first admin user","Create your administrator account to access the web interface:\n\n```bash\ndocker run --rm -v \u002Fopt\u002Fpostal\u002Fconfig:\u002Fconfig \\\n  --network host \\\n  ghcr.io\u002Fpostalserver\u002Fpostal:latest \\\n  postal make-user\n```\n\nEnter the email address, name and password for the administrator.",{"title":72,"body":73},"Start Postal and configure the reverse proxy","Launch all Postal services (web, workers, SMTP):\n\n```bash\ndocker run -d --name postal \\\n  --restart always \\\n  --network host \\\n  -v \u002Fopt\u002Fpostal\u002Fconfig:\u002Fconfig \\\n  ghcr.io\u002Fpostalserver\u002Fpostal:latest \\\n  postal start\n```\n\nPostal exposes the web interface on port 5000. Place a reverse proxy (Caddy or nginx) in front to terminate TLS, then access `https:\u002F\u002Fpostal.your-agency.com`.",{"title":75,"body":76},"Create an organisation and first sending server","In the Postal interface, create an **organisation** (your agency), then a **sending server** for your first client. Each server has its own SMTP credentials, its own API key and its own sending domains — it is the client isolation unit.\n\nNote the **SMTP hostname**, **port** (25, 465 or 587) and the generated **credentials**: these are the settings to hand to the client application or configure in its sending panel.",{"type":35,"title":78,"body":79},"Configuring a sending domain","In each Postal sending server, add the domains from which your clients will send email. For each domain, Postal automatically generates a 1024-bit RSA key pair and a unique DKIM selector (format `postal-XXXXXX._domainkey`).\n\nDNS records to publish for each client domain:\n\n**SPF** — add `include:spf.postal.your-agency.com` in the apex TXT record:\n```\nv=spf1 include:spf.postal.your-agency.com ~all\n```\n\n**DKIM** — publish the TXT value shown in the interface at the generated subdomain:\n```\npostal-XXXXXX._domainkey.client-domain.com  TXT  \"v=DKIM1; k=rsa; p=\u003Cpublic key>\"\n```\n\n**Return Path** (recommended) — a CNAME to improve bounce tracking:\n```\npsrp.client-domain.com  CNAME  psrp.postal.your-agency.com\n```\n\nPostal checks these records automatically every hour and flags any missing or incorrect record in the interface. The **Check my records** button triggers an immediate manual check.",{"type":81,"title":82,"body":83},"tip","DMARC: the final piece of deliverability","With SPF and DKIM in place, add a DMARC policy on each client domain to tell receivers how to handle alignment failures. Start in monitoring mode (`p=none`) to collect reports without risk of blocking, then progressively harden to `p=quarantine` and `p=reject`:\n\n```\n_dmarc.client-domain.com  TXT  \"v=DMARC1; p=none; rua=mailto:dmarc-reports@your-agency.com; fo=1\"\n```\n\nThe `rua` attribute sends daily aggregate reports to your address — you will see which sources send on your behalf, legitimate or otherwise. Postal itself produces SPF + DKIM aligned emails: on correctly configured domains, DMARC will pass from day one.",{"type":35,"title":85,"body":86},"Bounce management and statistics","This is the most visible difference between Postal and a bare Postfix relay. In the **Messages** tab of each sending server, every sent email is tracked with its status: `Sent`, `Delivered`, `SoftFail`, `HardFail`, `Bounced`.\n\nWhen a bounce is detected, Postal:\n1. Records the exact rejection reason in the message log (e.g. `550 5.1.1 The email account does not exist`)\n2. Updates the delivery status in the interface\n3. Fires a `MessageBounced` webhook event to your configured HTTP endpoint\n\nA bounce log visible in the interface looks like:\n```\n[2026-10-15 09:14:22] Delivery attempt to mx1.example.com (203.0.113.10:25)\n[2026-10-15 09:14:22] \u003C\u003C 550 5.1.1 \u003Ccontact@client-domain.com> User unknown\n[2026-10-15 09:14:22] Message marked as HardFail (permanent)\n```\n\n**Per-domain statistics** aggregate, over sliding windows (24 h, 7 d, 30 d): volume sent, delivery rate, bounce rate, spam filter rejection rate. These data let you detect a deliverability issue before the client notices it themselves.",{"type":88,"title":89,"headers":90,"rows":95},"comparison","Postal vs SaaS solutions vs Postfix relay",[91,92,93,94],"Criterion","Postal (self-hosted)","Mailgun \u002F Postmark","SMTP relay Postfix",[96,101,106,111],[97,98,99,100],"Visibility","Full interface: per-message log, bounce log, per-domain statistics","SaaS dashboard with 30-day logs (plan dependent)","No interface — system logs only",[102,103,104,105],"Cost","VPS + administration time (no per-email cost)","Per-send billing (approximately $0.80–$1.20 per 1,000 emails)","VPS only (no software cost)",[107,108,109,110],"Control","Total: IP, retention, bounce policy, per-client isolation","Partial: policies imposed by provider, shared IPs by default","Full routing control, zero visibility",[112,113,114,115],"Send limit","Limited by VPS resources and IP reputation — scalable","Quotas per plan, scale-up billed","Limited by VPS — no native per-domain quota management",{"type":35,"title":117,"body":118},"An email infrastructure you control","Postal is the tool agencies look for when they realise Postfix alone is no longer enough to operate a client portfolio. The platform brings the visibility that was missing — structured logs, tracked bounces, per-domain statistics — without the pricing constraints and vendor dependencies of SaaS alternatives.\n\nA VPS with 2 vCPU, 4 GB of RAM and a dedicated IPv4 is sufficient to get started. Unblocked port 25 and a correctly configured rDNS are the two prerequisites that many providers do not fulfil by default — check them before ordering.\n\nThe articles \u003Ca href=\"\u002Fblog\u002Fsmtp-relay-vps-emails-transactionnels-clients\">Postfix SMTP relay on VPS\u003C\u002Fa> and \u003Ca href=\"\u002Fblog\u002Fspf-dkim-dmarc-delivrabilite-emails-pro\">SPF, DKIM and DMARC\u003C\u002Fa> complete this guide to cover deliverability as a whole.","A VPS for your SMTP platform","Postal requires at least 2 vCPU and 4 GB of RAM. Our VPS plans include a dedicated IPv4, root access, configurable rDNS and port 25 unblocked on request — the exact prerequisites for a production Postal installation.","Manage your clients' email","\u002Fsolutions\u002Fagences",[124,141,157],{"id":125,"slug":126,"slugs":127,"title":131,"excerpt":132,"readTime":133,"views":134,"isPinned":19,"publishedAt":135,"updatedAt":136,"category":137,"categories":138,"featuredImage":29,"bgImage":30,"posterImage":140,"relatedSolution":29},280,"postfix-smtp-relay-on-vps-client-transactional-emails",{"fr":128,"en":126,"ar":129,"es":130},"smtp-relay-vps-emails-transactionnels-clients","إعداد-postfix-smtp-relay-على-vps-لبريد-المواقع","relay-smtp-postfix-en-vps-emails-transaccionales","Postfix SMTP Relay on VPS: Client Transactional Emails","Set up Postfix as an SMTP relay on a ServOrbit VPS: dedicated IPv4, SPF, DKIM and DMARC aligned for your entire cPanel client portfolio in under an hour.",8,1,"2026-08-18T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[139],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fsmtp-relay-vps-emails-transactionnels-clients-poster.svg",{"id":142,"slug":143,"slugs":144,"title":148,"excerpt":149,"readTime":150,"views":151,"isPinned":19,"publishedAt":152,"updatedAt":136,"category":153,"categories":154,"featuredImage":29,"bgImage":30,"posterImage":156,"relatedSolution":29},238,"hosting-your-own-email-server-on-a-vps-with-mailcow",{"fr":145,"en":143,"ar":146,"es":147},"heberger-serveur-email-vps-mailcow","استضافة-خادم-البريد-الإلكتروني-على-vps-باستخدام-mailcow","alojar-servidor-correo-vps-mailcow","Hosting Your Own Email Server on a VPS with Mailcow","Deploy Mailcow on a Linux VPS to run your own sovereign email server: installation, deliverability and migration from Google Workspace.",13,3,"2026-08-08T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[155],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fheberger-serveur-email-vps-mailcow-poster.svg",{"id":158,"slug":159,"slugs":160,"title":164,"excerpt":165,"readTime":166,"views":18,"isPinned":19,"publishedAt":167,"updatedAt":136,"category":168,"categories":169,"featuredImage":29,"bgImage":30,"posterImage":171,"relatedSolution":29},199,"spf-dkim-dmarc-passing-the-5000-email-threshold",{"fr":161,"en":159,"ar":162,"es":163},"spf-dkim-dmarc-delivrabilite-emails-pro","spf-وdkim-وdmarc-تجاوز-عتبة-5000-رسالة","spf-dkim-dmarc-superar-el-umbral-de-5000-correos","SPF, DKIM, DMARC: passing the 5,000-email threshold","Gmail and Outlook reject senders without aligned SPF, DKIM and DMARC with an SMTP 550 error. Here is how to configure all three records.",4,"2026-08-01T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[170],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fspf-dkim-dmarc-delivrabilite-emails-pro-poster.svg",1792123579746]