Mailcow vs iRedMail: Which Mail Server to Choose?
Quick Verdict
Mailcow is the better choice for most self-hosters. It deploys in minutes via Docker Compose, ships a polished admin UI and webmail out of the box, and upgrades cleanly through git pull. iRedMail wins if you need a bare-metal install where you understand and control every component individually, or if you are running on a low-memory VPS where Docker overhead matters. For anyone with 6+ GB of RAM and comfort with Docker, pick Mailcow.
Overview
Both Mailcow and iRedMail build a complete mail stack from the same core components — Postfix for SMTP, Dovecot for IMAP/POP3, and antispam/antivirus layers — but they take fundamentally different approaches to packaging and management.
Mailcow is a Docker-native mail server suite. You clone a repo, run a config generator, and docker compose up -d. It bundles Postfix, Dovecot, Rspamd, ClamAV, SOGo (webmail + groupware), Unbound (DNS resolver), Nginx, and MariaDB into 10-15 interconnected containers managed through a modern web admin panel with a full REST API. The current release is 2026-01.
iRedMail is a shell script installer that configures a full mail stack directly on a bare OS. It installs Postfix, Dovecot, Amavisd-new, SpamAssassin, ClamAV, Nginx, Roundcube (webmail), and either OpenLDAP, MariaDB, or PostgreSQL as the backend. Configuration lives in standard system files (/etc/postfix/, /etc/dovecot/, etc.) that you manage like any other Linux service. The current release is 1.7.4 (June 2025).
Feature Comparison
| Feature | Mailcow | iRedMail |
|---|---|---|
| Deployment method | Docker Compose | Shell script on bare OS |
| Web admin panel | Yes — full-featured mailcow UI | iRedAdmin (basic free; Pro is paid) |
| Webmail | SOGo (built-in, with calendar/contacts) | Roundcube (built-in) or SOGo (optional) |
| Calendar & contacts | SOGo CalDAV/CardDAV | SOGo (if installed) or none |
| SMTP | Postfix | Postfix |
| IMAP/POP3 | Dovecot | Dovecot |
| Spam filtering | Rspamd | SpamAssassin via Amavisd-new |
| Antivirus | ClamAV (enabled by default) | ClamAV via Amavisd-new |
| DKIM signing | Rspamd-managed, per-domain via UI | Amavisd-managed, manual config |
| Fail2ban | Custom built-in implementation | Fail2ban (standard system service) |
| Database backend | MariaDB only | OpenLDAP, MariaDB, or PostgreSQL |
| Two-factor auth | Yes (admin panel TOTP) | No (not in free edition) |
| REST API | Full API for domain/mailbox management | No (iRedAdmin-Pro has limited API) |
| User self-service | Password changes, aliases, filters via UI | Limited in free iRedAdmin |
| Rate limiting | Per-user controls via admin UI | Postfix-level only |
| Mailing lists | Basic, via admin panel | Mlmmj (built-in) |
| Architecture support | x86_64, ARM64 | x86_64 (SOGo unavailable on ARM) |
| License | GPL-3.0 | GPL-3.0 (installer); paid Pro components |
| Container count | 10-15 Docker containers | 0 — bare-metal services |
Installation Complexity
Mailcow Setup
Mailcow is the easier install by a wide margin. The entire process takes under 10 minutes on a fresh server:
# Install prerequisites
apt update && apt install -y git curl jq
# Install Docker (official method)
curl -fsSL https://get.docker.com | sh
# Clone mailcow
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized.git
cd mailcow-dockerized
# Generate configuration — answers prompts for hostname and timezone
./generate_config.sh
# Pull images and start
docker compose pull
docker compose up -d
After startup, the admin panel is available at https://mail.yourdomain.com with default credentials admin / moohoo. Adding domains, mailboxes, aliases, and DKIM keys all happens through the web UI. You never touch a Postfix or Dovecot config file.
Mailcow mailcow.conf key settings (generated by the script):
MAILCOW_HOSTNAME=mail.example.com
MAILCOW_PASS_SCHEME=BLF-CRYPT
DBNAME=mailcow
DBUSER=mailcow
DBPASS=<generated>
DBROOT=<generated>
HTTP_PORT=80
HTTP_BIND=0.0.0.0
HTTPS_PORT=443
HTTPS_BIND=0.0.0.0
SKIP_LETS_ENCRYPT=n
SKIP_CLAMD=n
SKIP_SOLR=y
TZ=UTC
iRedMail Setup
iRedMail requires a fresh, dedicated server. The installer modifies system-level configs across Postfix, Dovecot, Nginx, and your chosen database:
# Download iRedMail 1.7.4
cd /root
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.7.4.tar.gz
tar xzf 1.7.4.tar.gz
cd iRedMail-1.7.4
# Run the installer (interactive TUI)
bash iRedMail.sh
The installer walks through a text-based wizard: mail storage path, database backend (OpenLDAP, MariaDB, or PostgreSQL), first mail domain, admin password, and which optional components to enable (Roundcube, SOGo, Fail2ban, etc.). It then installs and configures every package from the OS repositories.
Post-install, you manage domains and mailboxes through iRedAdmin (the free web panel has limited functionality) or directly via SQL/LDAP commands. DKIM keys, transport rules, and spam thresholds require editing config files.
Key difference: Mailcow abstracts all configuration behind its UI and API. iRedMail gives you raw config files in standard locations — more control, more complexity.
Performance and Resource Usage
| Resource | Mailcow | iRedMail |
|---|---|---|
| Minimum RAM | 6 GB (8 GB recommended) | 4 GB (ClamAV is the main consumer) |
| RAM idle (typical) | 3-4 GB | 1.5-2.5 GB |
| RAM under load | 5-7 GB | 3-5 GB |
| Disk (base install) | 20 GB | 10-15 GB |
| CPU idle | Low | Low |
| Docker overhead | Yes (10-15 containers) | None |
Mailcow is heavier. The Docker layer adds overhead, and running SOGo + ClamAV + Rspamd + Solr (if enabled) in separate containers consumes more memory than the same services running natively. On a 4 GB VPS, Mailcow will swap constantly. iRedMail fits more comfortably on smaller servers because there is no container orchestration layer and services share the OS kernel directly.
If RAM is your constraint, iRedMail is the practical choice. If you have 8+ GB, the difference is negligible.
Upgrades and Maintenance
Mailcow: Upgrades are simple. Run the update script, which pulls new container images and applies migration steps:
cd /opt/mailcow-dockerized
./update.sh
The update script handles database migrations, config changes, and container rebuilds. Rollback means pointing to the previous git tag. Because everything runs in containers, a bad upgrade does not corrupt your host OS.
iRedMail: Upgrades follow manual, version-specific guides. Each point release (e.g., 1.7.3 to 1.7.4) has its own upgrade document with SQL commands, config file patches, and package updates. The iRedMail team publishes these at docs.iredmail.org. There is no automated upgrade script for the free edition — you apply each step manually.
This is iRedMail’s biggest weakness. Miss a step during a manual upgrade and you risk breaking your mail flow. Mailcow’s containerized approach makes upgrades dramatically safer and faster.
iRedMail Easy (paid) solves the upgrade problem with one-click updates, but it requires a subscription.
Backup and Recovery
Mailcow stores all state in Docker volumes and the mailcow.conf file. Back up the volumes (vmail-vol-1 for mailboxes, mysql-vol-1 for the database) and the mailcow-dockerized directory. Restore by spinning up containers against the same volumes on a new host. See our Backup Docker Volumes guide.
iRedMail stores data in standard filesystem locations: /var/vmail/ for mailboxes, the database in /var/lib/mysql/ or /var/lib/postgresql/, and configs in /etc/. Standard backup tools (rsync, BorgBackup, Restic) work without any Docker-specific considerations. See our Backup Strategy guide.
iRedMail has an edge here — backing up standard filesystem paths is simpler and more universally understood than Docker volume backups.
Community and Support
| Aspect | Mailcow | iRedMail |
|---|---|---|
| GitHub stars | 9,500+ | 1,500+ |
| Community forum | community.mailcow.email | forum.iredmail.org |
| Documentation | docs.mailcow.email (good) | docs.iredmail.org (good) |
| Paid support | Available | iRedMail Easy / Enterprise (paid tiers) |
| Update frequency | Monthly releases | Quarterly releases |
| Active development | Very active | Active |
Mailcow has a larger and more active community. Issues get resolved faster, third-party guides are more plentiful, and the monthly release cadence means bugs get patched quickly. iRedMail’s community is smaller but knowledgeable — the forum is responsive, and the documentation covers edge cases well.
Docker Deployment Reference
Mailcow Docker Setup
Mailcow manages its own docker-compose.yml internally — you do not write one by hand. The canonical deployment is:
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized.git
cd mailcow-dockerized
git checkout 2026-01
./generate_config.sh
# Answer: FQDN (mail.example.com), timezone (UTC)
docker compose pull
docker compose up -d
The generated stack includes these containers: postfix-mailcow, dovecot-mailcow, rspamd-mailcow, clamd-mailcow, sogo-mailcow, nginx-mailcow, mysql-mailcow, unbound-mailcow, memcached-mailcow, redis-mailcow, php-fpm-mailcow, acme-mailcow, netfilter-mailcow, watchdog-mailcow, and olefy-mailcow.
Key ports exposed by default:
25/tcp - SMTP
465/tcp - SMTPS
587/tcp - Submission
143/tcp - IMAP
993/tcp - IMAPS
110/tcp - POP3
995/tcp - POP3S
80/tcp - HTTP (redirects to HTTPS)
443/tcp - HTTPS (admin UI + webmail)
4190/tcp - ManageSieve
iRedMail Docker Setup
iRedMail’s official Docker image is still marked beta and not recommended for production by the iRedMail team. The supported deployment method is the bare-metal installer. That said, here is the Docker reference for testing or non-critical use:
# docker-compose.yml for iRedMail (beta — not production-recommended)
# See: https://github.com/iredmail/dockerized
services:
iredmail:
image: iredmail/mariadb:stable
container_name: iredmail
hostname: mail.example.com
restart: unless-stopped
env_file:
- iredmail-docker.conf
ports:
- "80:80"
- "443:443"
- "25:25"
- "465:465"
- "587:587"
- "143:143"
- "993:993"
- "110:110"
- "995:995"
- "4190:4190"
volumes:
- vmail-backup:/var/vmail/backup/mysql
- vmail-data:/var/vmail/vmail1
- vmail-mlmmj:/var/vmail/mlmmj
- vmail-mlmmj-archive:/var/vmail/mlmmj-archive
- vmail-imapsieve:/var/vmail/imapsieve_copy
- iredmail-custom:/opt/iredmail/custom
- iredmail-ssl:/opt/iredmail/ssl
- mysql-data:/var/lib/mysql
- clamav-data:/var/lib/clamav
- spamassassin-data:/var/lib/spamassassin
- postfix-spool:/var/spool/postfix
volumes:
vmail-backup:
vmail-data:
vmail-mlmmj:
vmail-mlmmj-archive:
vmail-imapsieve:
iredmail-custom:
iredmail-ssl:
mysql-data:
clamav-data:
spamassassin-data:
postfix-spool:
Create the iredmail-docker.conf environment file:
# Required — server FQDN
HOSTNAME=mail.example.com
# Required — your first mail domain
FIRST_MAIL_DOMAIN=example.com
# Required — admin password (change this)
FIRST_MAIL_DOMAIN_ADMIN_PASSWORD=ChangeThisStrongPassword123!
# Required — mailing list API token (generate with: openssl rand -base64 32)
MLMMJADMIN_API_TOKEN=your_random_token_here
# Required — Roundcube encryption key (generate with: openssl rand -base64 24)
ROUNDCUBE_DES_KEY=your_24char_random_key_here
Start the stack:
docker compose up -d
Access iRedAdmin at https://mail.example.com/iredadmin/ with [email protected] and the admin password. Roundcube webmail is at https://mail.example.com/mail/.
Important: The iRedMail team explicitly states the Docker image is beta and recommends bare-metal installation for production. If you want iRedMail in production, use the shell script installer on a dedicated VM.
Use Cases
Choose Mailcow If…
- You want a web UI for all mail administration (domains, mailboxes, aliases, DKIM, rate limits)
- You need SOGo for calendar and contacts (CalDAV/CardDAV)
- You prefer Docker-based deployment and isolated containers
- You want painless upgrades via
./update.sh - You have 6+ GB of RAM available
- You need a REST API for programmatic mailbox management
- You want two-factor authentication on the admin panel
Choose iRedMail If…
- You want to understand and control every component of your mail stack
- You are running on a VPS with only 4 GB of RAM
- You prefer bare-metal services over Docker containers
- You want to choose between OpenLDAP, MariaDB, or PostgreSQL backends
- You need a mail server integrated into an existing non-Docker infrastructure
- You are comfortable with manual, version-specific upgrades
- You want Amavisd-new + SpamAssassin instead of Rspamd for spam filtering
Final Verdict
Mailcow wins for most self-hosters. The web admin panel, automated upgrades, REST API, and SOGo groupware make it the more complete and maintainable package. The Docker-based architecture isolates mail services from your host OS, which simplifies both deployment and recovery. If you have the RAM (6 GB minimum, 8 GB recommended), Mailcow is the straightforward choice.
iRedMail is the right pick for bare-metal purists and constrained servers. If you want standard Linux services managed through standard config files, iRedMail gives you that transparency. It runs leaner, supports multiple database backends, and does not require Docker expertise. The trade-off is manual upgrades and a less capable free admin panel.
The deciding factor is usually deployment philosophy: Docker-native (Mailcow) or bare-metal (iRedMail). If you picked up self-hosting through Docker, Mailcow will feel natural. If you prefer managing services through systemd and config files, iRedMail aligns with that workflow.
FAQ
Can iRedMail run in Docker for production?
The iRedMail team has archived their Docker repository and labeled the Docker image as beta. For production Docker-based email, use Mailu, mailcow, or docker-mailserver. iRedMail’s supported production deployment is the bare-metal shell script installer on a dedicated Ubuntu or Debian server.
Does iRedMail’s free edition include all features?
No. iRedMail’s free (open-source) edition includes the shell installer, Postfix, Dovecot, and a basic admin panel (iRedAdmin). The paid editions — iRedAdmin-Pro, iRedMail Easy, and Enterprise — add features like advanced domain/mailbox management, per-user throttling, white/blacklisting, automated upgrades, and commercial support. Mailcow includes all of these features in its free, GPLv3-licensed version.
Can I migrate from iRedMail to mailcow?
Yes. Both use Postfix + Dovecot with Maildir format, so mailbox data is compatible. Copy Maildir data from /var/vmail/ to mailcow’s Dovecot volume, recreate domains and user accounts in mailcow’s admin panel, and update DNS records (MX stays the same if using the same hostname). Use imapsync for a cleaner migration with per-mailbox verification.
Which handles DKIM setup more easily?
Mailcow generates DKIM keys automatically through its admin UI — click a button, copy the DNS record. iRedMail configures DKIM through Amavisd-new, and adding DKIM for new domains requires editing config files and generating keys manually. For multi-domain setups, mailcow’s automated DKIM management saves significant time.
Can both handle large organizations?
Both scale to hundreds of mailboxes. Mailcow handles it through its web UI and REST API. iRedMail scales better with OpenLDAP as the user backend (useful if you already have LDAP infrastructure). For deployments over 500 mailboxes, both benefit from dedicated hardware, and iRedMail’s paid Enterprise edition adds features for large organizations.
Which is easier to troubleshoot?
iRedMail — because all components use standard system paths and standard configuration files. If Postfix misbehaves, you check /var/log/mail.log and /etc/postfix/main.cf like any other Postfix installation. With mailcow, you need docker compose logs postfix-mailcow and the config lives inside containers. For experienced Linux sysadmins, iRedMail’s bare-metal approach is more transparent.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments