[{"data":1,"prerenderedAt":201},["ShallowReactive",2],{"seo-verification":3,"blog-hosting-your-own-email-server-on-a-vps-with-mailcow-ma-en":6,"promo-bar-likely":165},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-hosting-your-own-email-server-on-a-vps-with-mailcow-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":149,"ctaBody":150,"ctaButton":151,"ctaUrl":152,"relatedPosts":153},238,"hosting-your-own-email-server-on-a-vps-with-mailcow",{"fr":12,"en":10,"ar":13,"es":14},"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.",20,3,false,"2026-08-08T00:00:00+00:00","2026-10-29T03:10:23+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\u002Fheberger-serveur-email-vps-mailcow-poster.svg","In July 2026, Microsoft raised Microsoft 365 prices by up to 43% depending on the plan (12 to 16% on Business Basic and Standard) — a shock that pushed thousands of SMBs to reconsider their email strategy. On top of that, Microsoft announced the end of Exchange Web Services (EWS) in October 2026, rendering dozens of third-party integrations obsolete and forcing urgent migrations. In this context, self-hosting your email is no longer a hobbyist project: it is a strategic, financial, and data sovereignty decision. Mailcow, with over 13,200 GitHub stars, has established itself as the reference solution for organizations that want to take back control of their messaging without sacrificing the comfort of a modern interface. This guide walks you through deploying Mailcow on a Linux VPS, step by step.",[34,38,50,53,81,84,87,90,93,96,99,120,123,141,143,146],{"type":35,"title":36,"body":37},"h2","Why Self-Host Your Email in 2026","Microsoft's price increase for Microsoft 365, effective 1 July 2026 — up to 43% depending on the plan was a wake-up call for many SMBs. An organization with 20 employees that was paying around €200 per month now faces bills of €285 or more, with no meaningful improvement in features. And that is not all: Microsoft has officially scheduled the shutdown of Exchange Web Services (EWS) for October 2026, making obsolete dozens of third-party integrations that relied on this protocol — shared calendars, CRM tools, in-house automations.\n\nFaced with these pricing and technical disruptions, self-hosted email has returned to the conversation with renewed legitimacy. Hosting your own mail server on a VPS offers three major advantages: full cost control (a properly sized VPS costs between €15 and €40 per month for 20 to 50 mailboxes), data sovereignty (your messages do not transit through a hyperscaler's datacenters), and simplified GDPR compliance (you know exactly where your data is stored and processed). For law firms, healthcare professionals, communication agencies, or any organization handling sensitive data, this last argument is often decisive.",{"type":39,"title":40,"items":41},"ul","What Mailcow Includes Out of the Box",[42,43,44,45,46,47,48,49],"**Postfix + Dovecot**: the time-tested open-source email duo — Postfix handles inbound and outbound SMTP, while Dovecot provides IMAP and POP3 access for your email clients.","**Rspamd**: a next-generation spam filtering engine far more accurate than SpamAssassin, with adaptive Bayes, greylisting, DKIM, ARC, and multi-factor scoring built in.","**SOGo**: a full-featured webmail client (calendars, contacts, tasks) with ActiveSync synchronization for Outlook and mobile devices, without needing Exchange.","**Web administration panel**: a modern control panel to manage domains, mailboxes, aliases, quotas, mailing lists, and DKIM policies in just a few clicks.","**WebAuthn \u002F two-factor authentication**: enhanced security via hardware keys (YubiKey, etc.) or TOTP to protect admin access and individual user mailboxes.","**Full REST API**: all administration actions are exposed through a documented API, enabling automation of mailbox and alias creation, or integration into your own customer portal.","**Built-in IMAP synchronization**: the interface's sync jobs (*E-Mail Configuration → Synchronizations*) copy messages from a source server (Gmail, Microsoft 365, cPanel…) into a Mailcow mailbox, without any command-line work.","**Automatic TLS certificates**: Let's Encrypt is natively integrated — Mailcow renews certificates for your mail domain with no manual intervention required.",{"type":35,"title":51,"body":52},"Technical and Network Prerequisites","Before starting the installation, make sure your VPS and network configuration meet the following requirements. On the hardware side, the Mailcow documentation asks for at least 6 GB of RAM plus 1 GB of swap in the default configuration: below that, you are outside what the authors plan for, and the hungriest containers (antispam, antivirus, database) are the first to suffer. Plan for 2 vCPUs and at least 20 GB of disk space for containers and emails — 50 GB is a reasonable starting point for a small organization.\n\nOn the network side, several points are non-negotiable. First, **port 25 must be open outbound**: many hosting providers block it by default to fight spam. Check with your provider before ordering. Second, you must be able to configure the **rDNS (reverse DNS \u002F PTR record)** for your IP: this allows recipient servers to verify that your IP actually maps to your mail hostname — without a correct PTR, your emails will land in spam at most major providers. Third, you need a **domain name** whose DNS you control (adding MX, A, and TXT records). Finally, a VPS running **Debian 12 or Ubuntu 24.04 LTS** is recommended for optimal compatibility with Docker and the Mailcow scripts. The Mailcow documentation lists Debian 11 to 13, Ubuntu 22.04 and newer, AlmaLinux 8 and 9, and Rocky Linux 9 as compatible; Alpine appears only with limited compatibility and manual adjustments.",{"type":54,"title":55,"steps":56},"steps","Installing Mailcow in 8 Steps",[57,60,63,66,69,72,75,78],{"title":58,"body":59},"Provision the VPS and Configure rDNS","Order a VPS with at least 6 GB of RAM, 2 vCPUs, and a dedicated IP. In your hosting control panel, navigate to the rDNS (or PTR record) section and map your IP to `mail.yourdomain.com`. This setting is critical: without a correct PTR, your emails will be systematically rejected or marked as spam by Gmail, Outlook, and other major providers. Allow up to 24 hours for PTR propagation.",{"title":61,"body":62},"Point Your Domain's DNS Records","In your DNS manager, create an **A** (or AAAA) record for `mail.yourdomain.com` pointing to your VPS IP. Add an **MX** record on `yourdomain.com` with the value `mail.yourdomain.com` and a priority of 10. Also prepare your SPF record (`v=spf1 mx ~all`) and DMARC record (`_dmarc.yourdomain.com`) — DKIM will be automatically generated by Mailcow when it first starts.",{"title":64,"body":65},"Install Docker and Docker Compose","Connect to your VPS via SSH as root. Install Docker using the official script: `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. Docker Compose v2 is included in modern Docker packages. Verify the versions with `docker --version` and `docker compose version`. Ensure the Docker service starts automatically with `systemctl enable --now docker`.",{"title":67,"body":68},"Clone the Repository and Generate the Configuration","Clone the official repository into `\u002Fopt\u002Fmailcow-dockerized`: `git clone https:\u002F\u002Fgithub.com\u002Fmailcow\u002Fmailcow-dockerized \u002Fopt\u002Fmailcow-dockerized`. Enter the directory and run `.\u002Fgenerate_config.sh`. The script asks for your mail hostname (e.g., `mail.yourdomain.com`) and timezone. It generates the `mailcow.conf` file with secure random keys — do not manually modify these keys afterward.",{"title":70,"body":71},"Start Mailcow","From `\u002Fopt\u002Fmailcow-dockerized`, run `docker compose pull` to download all images (approximately 2 to 4 GB depending on your connection), then `docker compose up -d` to start all containers in the background. The first startup takes 2 to 5 minutes. Check container status with `docker compose ps` — all should show a status of `Up` or `Up (healthy)`.",{"title":73,"body":74},"Access the UI and Create Your First Domain","Open your browser at `https:\u002F\u002Fmail.yourdomain.com`. Default credentials are `admin` \u002F `moohoo`. **Change the admin password immediately.** Under *Configuration → Domains*, add your domain. Then create your first mailbox under *Configuration → Mailboxes*. The interface is intuitive and well-organized.",{"title":76,"body":77},"Enable DKIM and Test Deliverability","Under *Configuration → ARC\u002FDKIM Keys*, select your domain and click *Generate new key* (2048-bit length recommended). Copy the generated TXT record and add it to your DNS manager (TXT record on `dkim._domainkey.yourdomain.com`). Then send a test email from your new mailbox to `check-auth@verifier.port25.com`, or use `mail-tester.com` for a comprehensive deliverability score.",{"title":79,"body":80},"Set Up Automated Backups","Mailcow provides an official backup script at `helper-scripts\u002Fbackup_and_restore.sh`. Schedule a daily run via cron: `0 3 * * * MAILCOW_BACKUP_LOCATION=\u002Fopt\u002Fbackup \u002Fopt\u002Fmailcow-dockerized\u002Fhelper-scripts\u002Fbackup_and_restore.sh backup all`. The `MAILCOW_BACKUP_LOCATION` variable skips the interactive question about the location; then ship that folder to external storage (NFS mount, S3 bucket, remote directory via rsync). Add `--delete-days 3` to the command to purge older copies. The documentation asks you not to copy the script elsewhere: call it from its original folder. Test a restore before considering the backup operational.",{"type":35,"title":82,"body":83},"Deliverability: Pitfalls to Avoid","A technically correct mail server can still have its messages land in spam if certain network and DNS conditions are not met. Here are the most common mistakes.\n\n**Blacklists**: your VPS IP may be listed in blacklists like Spamhaus or Barracuda if it was previously used for spam — this is common with datacenter IP ranges. Check your IP on `mxtoolbox.com\u002Fblacklists.aspx` before installation. If listed, request delisting from each organization or switch IPs.\n\n**Port 25 blocked**: some hosting providers block outbound port 25 on all new IPs for a probation period. Contact support before starting.\n\n**Missing or misconfigured DKIM**: an email without a valid DKIM signature is treated with suspicion by Gmail and Outlook. Verify with `dig TXT dkim._domainkey.yourdomain.com` that the record is visible.\n\n**DMARC too permissive**: start with `p=none` to collect reports without blocking, then move to `p=quarantine` and `p=reject` once you are confident all legitimate mail streams are covered by SPF and DKIM.\n\n**Missing PTR record**: the most commonly forgotten point. Without a PTR record resolving to your mail hostname, Microsoft Outlook will reject your emails with a 550 error.",{"type":85,"body":86},"tip","**Mailcow behind Nginx Proxy Manager**: if your VPS hosts other web services (website, application), you can run Mailcow alongside Nginx Proxy Manager on the same IP. The key is to let NPM handle only ports 80 and 443 (HTTP\u002FHTTPS) as a reverse proxy, while Mailcow retains direct control over SMTP ports (25, 465, 587) and IMAP\u002FPOP3 (993, 995). In `mailcow.conf`, set `HTTP_PORT=8080`, `HTTP_BIND=127.0.0.1`, `HTTPS_PORT=8443` and `HTTPS_BIND=127.0.0.1`, apply with `docker compose up -d`, then configure NPM to proxy to `http:\u002F\u002F127.0.0.1:8080` (the port used by the Nginx example in the Mailcow documentation). Never try to route port 25 through an HTTP reverse proxy — SMTP does not work that way.",{"type":35,"title":88,"body":89},"Migrating from Google Workspace or Microsoft 365 to Mailcow","Migrating existing emails is often what holds organizations back. Mailcow includes IMAP sync jobs directly in its interface, making the operation accessible without advanced technical skills.\n\nThe basic procedure is: (1) create the destination mailboxes in Mailcow, (2) open *E-Mail Configuration → Synchronizations* in the admin interface (a user has the same tool under *User Settings → Sync Jobs*), (3) enter the host, port, username and password of the source server, choose the encryption — TLS usually fits port 143, SSL fits port 993, and PLAIN is strongly discouraged — then enable the job. It copies messages folder by folder. The migration can be run multiple times before the final cutover (already-copied messages are skipped on subsequent passes), enabling a **progressive cutover**: you continue receiving mail on the old address while data migrates, then switch the MX record in a single operation. Once the switch is done, disable or delete the job.\n\nFor Microsoft 365, do not count on EWS: according to Microsoft's documentation, it starts being disabled for all organizations in October 2026 and will be fully disabled in April 2027, so migration tools that rely on it will stop working. Mailcow uses IMAP, not EWS, and is therefore unaffected — yet another reason to migrate early.\n\nFor email clients, Thunderbird, Apple Mail, and mobile apps (iOS, Android) configure via standard IMAP\u002FSMTP. Outlook works too, including calendar and contact sync via ActiveSync (SOGo).",{"type":35,"title":91,"body":92},"Comparison: Mailcow vs Mailu vs iRedMail","Mailcow is not the only Docker-based self-hosted email solution. Here is how it compares to its main competitors.\n\n**Mailu** is lighter on resources (runs with 1 GB of RAM) and suits personal use or very small organizations. Its interface is minimalist, it does not include SOGo, and its feature set is more limited. It is an excellent choice when simplicity is a priority over features.\n\n**iRedMail** is a mature solution, available as a community edition and a paid Pro version (iRedMail Pro). It supports multiple database backends (MySQL, PostgreSQL, LDAP) and installs directly on the host system without Docker. Its configuration curve is steeper, and updates are less automated. iRedMail Pro adds a paid web management interface that competes with Mailcow's.\n\n**Mailcow** stands out for the richness of its features, the quality of its administration interface, the frequency of its updates (monthly releases), and the size of its community (13,200+ GitHub stars). It is the natural choice for an SMB that wants a complete, actively maintained solution with abundant documentation. The trade-off is RAM consumption: 6 GB minimum is a non-negotiable requirement.",{"type":35,"title":94,"body":95},"Maintenance and Version Upgrades","Mailcow publishes one release per month, and its tag carries the year and month (`2026-10` for the one of 21 October 2026). They fix security vulnerabilities, improve spam filters, and add features. The official update procedure is straightforward and well-documented.\n\nFrom the `\u002Fopt\u002Fmailcow-dockerized` directory, run `.\u002Fupdate.sh`. This script pulls the new Docker images, applies any configuration migrations, and restarts the affected containers. The operation typically takes 5 to 15 minutes with less than a minute of service interruption for the restarted containers.\n\n**Do not use Watchtower** (the automatic Docker container update tool) with Mailcow. Mailcow updates sometimes involve database migrations or configuration changes that require running `update.sh` in the correct order. Letting Watchtower pull and restart images autonomously can corrupt your installation.\n\nSchedule updates during a known maintenance window (for example, Saturday morning), read the release note on the Mailcow repository's releases page before applying, and verify container status with `docker compose ps` after each update. Take a full backup right before each update. When the release is a security update, do not wait: the next section gives the emergency procedure.",{"type":35,"title":97,"body":98},"Updating Mailcow urgently: the PHP2Shell case","Mailcow is not a PHP application sitting on your system: it ships its own PHP, in the `php-fpm-mailcow` container, which runs the admin interface. Your distribution's PHP fixes therefore do not apply to it, and an `apt upgrade` on the VPS changes nothing about the version Mailcow uses. That is what prompted thread \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmailcow\u002Fmailcow-dockerized\u002Fissues\u002F7533\">#7533\u003C\u002Fa>, opened on 21 October 2026 under the title \"[UPDATE NOW] PHP RCE Vulnerability (CVE-2026-109618 and CVE-2026-109619)\": administrators there ask for a fix from Mailcow itself. Both flaws are detailed in our article [PHP2Shell: fixing CVE-2026-109618 and CVE-2026-109619](\u002Fblog\u002Fphp2shell-cve-2026-109618-109619-mettre-a-jour-php).\n\nOn the version side, the `2026-10` release, published on 21 October 2026, is titled \"Security Update: PHP 8.2.35, SOGo 5.12.12 & Nginx 1.30.6\". Its notes do not cite the CVE numbers: the link is made through the PHP version, since 8.2.35 is the fixed version of the 8.2 branch in the \u003Ca href=\"https:\u002F\u002Fwww.php.net\u002Farchive\u002F2026.php\">PHP project's advisory\u003C\u002Fa> of the same day, and the `phpfpm` image shipped with that release carries the tag `8.2.35-1`. Read the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmailcow\u002Fmailcow-dockerized\u002Freleases\u002Ftag\u002F2026-10\">release note\u003C\u002Fa> before acting: a newer release may have changed these numbers.",{"type":54,"title":100,"steps":101},"Emergency procedure in six steps",[102,105,108,111,114,117],{"title":103,"body":104},"Back up first","From any folder, run `MAILCOW_BACKUP_LOCATION=\u002Fopt\u002Fbackup \u002Fopt\u002Fmailcow-dockerized\u002Fhelper-scripts\u002Fbackup_and_restore.sh backup all`. Check that the destination folder actually contains files before moving on, and keep a copy off the VPS: a backup that lives on the machine you are about to modify protects nothing.",{"title":106,"body":107},"Read what the update will change","In `\u002Fopt\u002Fmailcow-dockerized`, `.\u002Fupdate.sh --check` tells you whether an update exists and what it changes, without applying anything. Open the release note alongside and look for the \"Security\" heading: if the PHP numbers are not there, it is up to you to compare them with the PHP project's advisory.",{"title":109,"body":110},"Apply the update","Run `.\u002Fupdate.sh` from the same folder and answer the script's questions. Do not use `--force`, which the documentation presents as unsupported, nor `--ours`, which it advises against: they hide file conflicts instead of resolving them. Plan for a few minutes of downtime.",{"title":112,"body":113},"Check the PHP version inside the container","`docker compose exec php-fpm-mailcow php -v` must show 8.2.35 or a newer version. `docker compose images php-fpm-mailcow` gives the image and its tag (`8.2.35-1` for the `2026-10` release). The `php -v` of the VPS itself, outside the container, says nothing about Mailcow: the check inside the container is the one that counts.",{"title":115,"body":116},"Check the state of the stack","`docker compose ps` must show every container as `Up` or `Up (healthy)`. Then run `docker compose logs --tail 50 php-fpm-mailcow` to look for a startup error, open the web interface and send a test message from a mailbox to an external address.",{"title":118,"body":119},"If you cannot update right away","Thread #7533 listed stopgaps before the fix was released: `session.upload_progress.enabled = Off` (judged incomplete by the thread's author), an nginx rule that answers 403 to `multipart` requests, and binding the interface to 127.0.0.1 via `HTTP_BIND` and `HTTPS_BIND`, which also cuts direct access to the interface and, one participant points out, makes MTA-STS unavailable. These buy a few hours, they are not a fix. If the update goes wrong, the documentation provides a rollback: `docker compose down`, `git checkout \u003Ccommit ID>`, `docker compose pull`, then `docker compose up -d`; `update.sh` leaves a \"Before update\" commit to find with `git log`.",{"type":35,"title":121,"body":122},"Troubleshooting: the netfilter container restarts in a loop","On a VPS that already hosts other Docker containers, the `netfilter-mailcow` container can start restarting endlessly. The visible symptom: the web interface stops responding, the `unbound-mailcow` container is reported as failing (\"dependency failed to start: container mailcowdockerized-unbound-mailcow-1 is unhealthy\") and netfilter's logs repeat \"MAILCOW target not found in ip forward table, restarting container to fix it...\".\n\nReported cause: at startup, netfilter checks the position of its `MAILCOW` chain in the `FORWARD` table. According to thread \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmailcow\u002Fmailcow-dockerized\u002Fissues\u002F6795\">#6795\u003C\u002Fa>, the code in `NFTables.py` assumes the chain sits in first position and places it by insertion; if Docker has already created its own chains, the check fails, the container exits, and each restart adds one more `MAILCOW` jump. In \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmailcow\u002Fmailcow-dockerized\u002Fissues\u002F6995\">#6995\u003C\u002Fa>, one participant counts more than 9,000 of them, and another describes the same effect after a Docker update on Debian.\n\nWhat we know about the status: #6795, opened in September 2025, was closed as \"not planned\" in December 2025 after a \"stale\" label; #6995, opened in January 2026, was closed the same way in October 2026. No maintainer confirms a fix there, and one participant believes the root cause needs a refactor. What follows is therefore a community workaround, not an official procedure.",{"type":54,"title":124,"steps":125},"Diagnose, then work around, from safest to riskiest",[126,129,132,135,138],{"title":127,"body":128},"Confirm the duplicates","`docker compose logs --tail 50 netfilter-mailcow` shows the messages above. `iptables -S FORWARD | grep -c MAILCOW` counts the jumps to the `MAILCOW` chain: one is expected, and more confirms the diagnosis. Repeat the test with `ip6tables` if IPv6 is enabled.",{"title":130,"body":131},"Avoid the problem at the source","The safest course is not to run Mailcow alongside other Docker stacks: a machine dedicated to mail avoids the collision. The Mailcow documentation also flags several problems with an active ufw or firewalld, recommends disabling it and moving your rules to the `DOCKER-USER` chain, and states that `INPUT` rules have no effect on Mailcow.",{"title":133,"body":134},"Clean up the duplicates","List the rules with `iptables -t filter -L FORWARD --line-numbers`, spot the lines that jump to `MAILCOW`, then delete them with `iptables -t filter -D FORWARD \u003Cnumber>`, recounting after each deletion because the numbers shift. Restart the stack with `docker compose down && docker compose up -d`. Do not touch the `DOCKER` rules of your other containers. This cleanup is temporary: if the cause is still there, the duplicates come back.",{"title":136,"body":137},"Hook MAILCOW into DOCKER-USER","In #6995, one participant reports keeping bans working by hooking the chain into `DOCKER-USER`: `iptables -I DOCKER-USER 1 -m comment --comment \"mailcow bans\" -j MAILCOW`, with the equivalent `ip6tables` command. Another proposes an unofficial netfilter test image, proven only with nftables. Upstream validates neither route: try them on a disposable VM, with a snapshot, before touching production.",{"title":139,"body":140},"Remove the isolation rule, as a last resort","If netfilter's isolation rule blocks legitimate flows, `DISABLE_NETFILTER_ISOLATION_RULE=y` in `mailcow.conf`, followed by `docker compose up -d`, removes it. The file's comment warns that this may expose container ports to neighbors on the same subnet, even when they are bound to localhost: keep this setting for a machine dedicated to Mailcow.",{"type":85,"body":142},"**A VPS for mail alone**: the sizing of 6 GB plus swap assumes Mailcow has the machine to itself. On a VPS shared with a showcase site or a containerized application, you add up the RAM of each stack, the firewall-rule collision risk described above, and one more PHP to watch at every security advisory. Separating mail from the rest costs one more VPS, but removes all three issues at once.",{"type":35,"title":144,"body":145},"When Self-Hosting Email Is Not Advisable","Self-hosting email is not a universal answer. There are situations where Google Workspace or Microsoft 365 remains the more sensible choice, even after the price increase.\n\n**If you lack in-house technical expertise**: managing a mail server requires regular security monitoring, proactive updates, and the ability to diagnose deliverability issues. Without these skills, you risk being left without email during a critical incident.\n\n**If deliverability is absolutely critical**: large-scale transactional email operations (banks, insurers, high-volume e-commerce platforms) benefit from the reputation of shared IPs professionally managed by ESPs (Mailgun, Postmark, Brevo). A solo VPS starts with a fresh IP whose reputation must be built from scratch.\n\n**If your hosting provider blocks port 25**: some cloud operators (particularly on entry-level plans) permanently block this port to combat spam. Verify before committing.\n\n**If you operate in a strictly regulated industry**: some sectors (finance, healthcare) impose certification or audit requirements for email infrastructure that can be difficult to satisfy with self-hosting without specialized support.",{"type":35,"title":147,"body":148},"Conclusion: An Email Server That Belongs to You","Self-hosting your email server with Mailcow on a VPS is now within reach of any organization with a minimum of technical maturity. The solution is mature, actively maintained, and delivers a functional level that honestly competes with commercial offerings — at a fraction of the cost.\n\nMicrosoft 365's price increase and the end of EWS in 2026 have transformed self-hosting from a fringe option into a strategic alternative for thousands of SMBs and agencies. With a properly sized VPS (6 GB RAM, dedicated IP with configured rDNS), a Mailcow installation takes less than an hour, and the migration of existing mailboxes can be done progressively without service interruption.\n\nThree things to remember before getting started: verify that port 25 is open with your hosting provider, configure the PTR record for your IP before sending your very first email, and set up external backups from day one. With these foundations in place, your email server will be just as reliable — and far more cost-effective — than a cloud subscription.\n\nAdd a fourth reflex to these three: Mailcow carries its own PHP, so every PHP security advisory is handled with `.\u002Fupdate.sh` followed by a check inside the container, as with PHP2Shell in October 2026.","A VPS for Your Email Server","Mailcow requires at least 6 GB of RAM and 2 vCPUs. Our Linux VPS plans are delivered with Debian 12 or Ubuntu 24.04, root access, a dedicated IP, and configurable rDNS — essential for email deliverability.","View Linux VPS Plans","\u002Fvps-linux",[154,172,186],{"id":155,"slug":156,"slugs":157,"title":161,"excerpt":162,"readTime":163,"views":164,"isPinned":19,"noindex":165,"publishedAt":166,"updatedAt":167,"category":168,"categories":169,"featuredImage":29,"bgImage":30,"posterImage":171,"relatedSolution":29},199,"spf-dkim-dmarc-passing-the-5000-email-threshold",{"fr":158,"en":156,"ar":159,"es":160},"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,0,true,"2026-08-01T00:00:00+00:00","2026-09-07T11:26:10+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",{"id":173,"slug":174,"slugs":175,"title":179,"excerpt":180,"readTime":163,"views":164,"isPinned":19,"noindex":19,"publishedAt":181,"updatedAt":167,"category":182,"categories":183,"featuredImage":29,"bgImage":30,"posterImage":185,"relatedSolution":29},210,"bimi-display-your-logo-in-gmail-and-apple-mail",{"fr":176,"en":174,"ar":177,"es":178},"bimi-logo-marque-email-gmail-apple-mail","bimi-اعرض-شعارك-في-gmail-وapple-mail","bimi-mostrar-su-logo-en-gmail-y-apple-mail","BIMI: display your logo in Gmail and Apple Mail","BIMI displays your brand logo next to your emails in Gmail, Apple Mail and Yahoo. Full guide: DMARC requirements, VMC, CMC and DNS record.","2026-08-02T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[184],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fbimi-logo-marque-email-gmail-apple-mail-poster.svg",{"id":187,"slug":188,"slugs":189,"title":193,"excerpt":194,"readTime":163,"views":164,"isPinned":19,"noindex":19,"publishedAt":195,"updatedAt":196,"category":197,"categories":198,"featuredImage":29,"bgImage":30,"posterImage":200,"relatedSolution":29},215,"migrating-professional-email-leaving-gmail-and-microsoft-365",{"fr":190,"en":188,"ar":191,"es":192},"migrer-email-pro-quitter-gmail-microsoft-365","الانتقال-من-gmail-وmicrosoft-365-نقل-بريدك-المهني","migrar-correo-profesional-dejar-gmail-microsoft-365","Migrating professional email: leaving Gmail and Microsoft 365","Microsoft 365 raised prices in 2026 and EWS shuts down in October. Here's how to migrate your business email without interruption.","2026-08-03T00:00:00+00:00","2026-11-09T20:55:14+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[199],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fmigrer-email-pro-quitter-gmail-microsoft-365-poster.svg",1794270421970]