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

FeatureMailcowiRedMail
Deployment methodDocker ComposeShell script on bare OS
Web admin panelYes — full-featured mailcow UIiRedAdmin (basic free; Pro is paid)
WebmailSOGo (built-in, with calendar/contacts)Roundcube (built-in) or SOGo (optional)
Calendar & contactsSOGo CalDAV/CardDAVSOGo (if installed) or none
SMTPPostfixPostfix
IMAP/POP3DovecotDovecot
Spam filteringRspamdSpamAssassin via Amavisd-new
AntivirusClamAV (enabled by default)ClamAV via Amavisd-new
DKIM signingRspamd-managed, per-domain via UIAmavisd-managed, manual config
Fail2banCustom built-in implementationFail2ban (standard system service)
Database backendMariaDB onlyOpenLDAP, MariaDB, or PostgreSQL
Two-factor authYes (admin panel TOTP)No (not in free edition)
REST APIFull API for domain/mailbox managementNo (iRedAdmin-Pro has limited API)
User self-servicePassword changes, aliases, filters via UILimited in free iRedAdmin
Rate limitingPer-user controls via admin UIPostfix-level only
Mailing listsBasic, via admin panelMlmmj (built-in)
Architecture supportx86_64, ARM64x86_64 (SOGo unavailable on ARM)
LicenseGPL-3.0GPL-3.0 (installer); paid Pro components
Container count10-15 Docker containers0 — 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

ResourceMailcowiRedMail
Minimum RAM6 GB (8 GB recommended)4 GB (ClamAV is the main consumer)
RAM idle (typical)3-4 GB1.5-2.5 GB
RAM under load5-7 GB3-5 GB
Disk (base install)20 GB10-15 GB
CPU idleLowLow
Docker overheadYes (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

AspectMailcowiRedMail
GitHub stars9,500+1,500+
Community forumcommunity.mailcow.emailforum.iredmail.org
Documentationdocs.mailcow.email (good)docs.iredmail.org (good)
Paid supportAvailableiRedMail Easy / Enterprise (paid tiers)
Update frequencyMonthly releasesQuarterly releases
Active developmentVery activeActive

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.

Comments