mrkeyoor.com_
Fri 23 Oct 23:38 UTC
Self-Hostedevaluationupdated 23 Oct 2026

Mailu review

Mailu packages a self-hosted email server as Docker images, including mail delivery, webmail and browser-based administration. It helps operators run their own domains without assembling each mail component separately, while leaving DNS and reliable delivery in their hands.

Verdict

Our Mailu sandbox installed in 30 seconds and built in 9 seconds, then pytest stopped after 6 seconds because it could not import Flask. Mailu belongs on the shortlist when you want web administration for your own email domains and can own DNS and delivery operations. The supplied checks do not establish a working mail server, so require an external send/receive rehearsal before moving users.

We ran it

Lab card: what happened when we ran MailuScreenshot of Mailu (mailu.io)
Install✓ · 30s35 packages · 37 MB
Build✓ · 9s
Tests✗ · 6sran, no count parsed
Known vulns0(pip-audit)
Repo621 files~21,274 lines of source · 2.9 MB · 4 CI workflows · tests dir

Answers from our run

Does Mailu build from source?

Dependencies installed in 30 seconds (35 packages), and the build succeeded in 9 seconds. We cloned commit 5ccc8ab into a clean Debian container with 3 CPUs and no project-specific setup.

Do Mailu's tests pass?

No. The project's own test command exited unsuccessfully after 6 seconds, and its output did not expose an individual test count.

Does Mailu have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use Mailu?

Teams seeking long-term professional support from this project: the setup guide explicitly points readers seeking that service elsewhere.

What are the alternatives to Mailu?

Docker Mailserver, mailcow. Our Mailu sandbox installed in 30 seconds and built in 9 seconds, then pytest stopped after 6 seconds because it could not import Flask.

SetupN/ANot assessed: the supported Docker mail deployment was not reproduced; the supplied Python checks stopped at a missing Flask import.
DocsN/AThe README and setup guide were read, but their deployment and DNS instructions were not verified end to end for a numerical rating.
CommunityN/ACurrent push, release and issue activity were checked; responsiveness and long-term support quality were not assessed.
MaturityN/ANo running mail stack, mailbox recovery or external delivery was assessed; the supplied source suite stopped during configuration loading.

Who it’s for

Operators who want their own email domains with webmail and an administration interface.
Small organizations that can assign someone to DNS, updates and mail-delivery checks.
Domain administrators who need delegated administration, aliases and quotas.
Teams choosing free software for an email-focused deployment rather than a broader groupware system.

Who it’s NOT for

Teams seeking long-term professional support from this project: the setup guide explicitly points readers seeking that service elsewhere.
Operators without DNS control: the setup guide requires a hostname and receiving domain, then mail-authentication records.
Deployments following a development image by habit: the guide says latest follows master and should never be used for production.
Buyers expecting a broad groupware suite: the README deliberately excludes unrelated groupware features.
Python contributors requiring an immediately usable suite in the supplied sandbox: pytest stopped while importing Flask.

Setup reality

Our sandbox installed Mailu commit 5ccc8ab in 30 seconds, recording 35 dependencies and 37 MB on disk, and built it in 9 seconds. Tests failed with exit 4 after 6 seconds: loading conftest reached the admin package, whose Flask import raised ModuleNotFoundError. Pip-audit reported 0 known vulnerabilities in this run.

A usable mail service needs the Docker deployment, a hostname and receiving domain under your DNS control, plus administrator and mailbox credentials. Mailu's guide adds SPF, DKIM and DMARC configuration and external delivery checks. Our Python checks did not establish a working mail deployment.

The guide documents Linux container architectures and warns against the development latest image for production. Our recorded configuration was 3 CPUs, 8 GB RAM and image ghcr.io/astral-sh/uv:python3.12-bookworm; actual runtime and OS versions require raw logs. The excerpt does not explain why Flask was unavailable.

Mailu packages mail delivery and web administration together

Mailu combines email protocols, webmail and a browser administration interface in a set of Docker images. Its README names per-domain delegation, aliases and quotas. That combination is useful when you need someone to administer mailboxes without editing every account through server configuration files.

The project deliberately focuses on email and avoids unrelated groupware features. I'd consider it for an organization that wants to operate its own domains and has a named mail administrator. Choosing it only because Docker is familiar would miss the harder decision. Someone still needs to own the domain's configuration and investigate mail that fails to arrive.

What happened when we ran it

Our sandbox installed Mailu commit 5ccc8ab in 30 seconds and built it in 9 seconds. The dependency record contained 35 entries and reported 37 MB on disk. The October 23, 2026 run used a recorded configuration of 3 CPUs, 8 GB RAM and image ghcr.io/astral-sh/uv:python3.12-bookworm. The image label does not establish the actual interpreter or operating-system version.

The test step failed after 6 seconds with exit 4. Pytest was loading tests/conftest.py when it imported create_app_from_config and models from the mailu package. That import reached core/admin/mailu/init.py, where import flask raised ModuleNotFoundError: No module named 'flask'. This is a failure during configuration loading; the supplied record gives no passing or failing assertion count.

The missing import is the diagnostic we have. The tail does not establish why Flask was absent or which dependency-management step should have supplied it. Installation and build success therefore did not produce a runnable suite in this sandbox. They also did not exercise the Docker mail service or establish that released mail delivery is broken.

Pip-audit reported 0 known vulnerabilities. That result applies to the Python audit in the supplied run, not to every component shipped in Mailu's container deployment. The lab gives no complete image-security assessment. Treat the audit as one bounded observation alongside the configuration-loading failure, rather than as clearance to put a mail server on the internet.

DNS and external delivery checks remain the operator's work

Mailu's setup guide requires a DNS hostname and a DNS name for receiving email. It then directs operators through DNS configuration and administrator steps for mail-authentication records. Docker images package the services; they cannot make those domain-level choices for you.

The same guide tells operators to send mail to an external service, verify SPF and DKIM there, and receive mail back. It also calls for inspecting service logs and checking for an open relay. Those checks answer questions our source build cannot: whether mail leaves through the intended route, whether another provider accepts its authentication and whether outside senders can reach a mailbox.

Before moving users, perform that rehearsal with a domain and mailbox you control. Retain the delivery results and log evidence so a later failure has something concrete to compare against. If nobody can take responsibility for that work, stop the selection process here. A web administration interface cannot substitute for an operator who can explain why a message was rejected.

The stable branch has current patches despite its older name

GitHub recorded a last push on October 23, 2026, and published release 2024.06.67 that day. Its notes describe a patched PHP runtime for webmail and link the change to a project issue. The dated release ties that update to issue-driven webmail maintenance. The year in the release name is therefore poor evidence of abandonment; dated maintenance tells a different story.

The setup guide recommends the stable 2024.06 branch and explicitly warns against using latest, which follows the development branch, for production. Release notes distinguish a moving branch tag from an immutable patch tag. Choose the update behavior deliberately and read the relevant changes before refreshing images. Our Python audit did not assess the webmail runtime discussed in those release notes.

Configuration files and commercial support separate the alternatives

Docker Mailserver describes configuration-file administration without an SQL database. Evaluate it when that operating model fits your team better than Mailu's web administration. This is a management preference, not evidence of a smaller footprint or faster deployment. We have no comparative measurements for either mail stack here.

mailcow links a paid support contract in its README. That deserves investigation when an accountable commercial support route is part of the purchase decision. Check the actual agreement and coverage before relying on it. Mailu's own setup guide directs readers seeking long-term professional support elsewhere, so that requirement should affect the shortlist early.

Domain delegation is useful when someone owns delivery

Mailu's per-domain administration and mailbox features give it a practical audience: people who need to operate email for others while keeping routine account work in a browser. That is a clearer reason to adopt it than a short source-install timing. The supplied run reached a Flask import failure before it could tell us how the admin application behaved.

I'd trial Mailu on a separate domain before moving an organization's inboxes. Make external delivery and authentication checks the acceptance evidence, and resolve the Python environment separately if you intend to contribute code. The next milestone is a message accepted outside your server and a reply received back, with an operator able to trace both.

Alternatives

ProjectWhat it isPick it when
Docker MailserverA containerized mail server managed through configuration files without an SQL database.pick this instead when file-based administration is a better fit than adopting Mailu for its web administration.
mailcow gh↗A Docker-based mail project whose README links a paid support contract.pick this instead when a published commercial support route is a requirement you need to investigate before choosing a mail stack.

What people are saying

  1. [github-trending] Mailu/Mailu

Sources

  1. Mailu README
  2. Mailu stable setup guide
  3. Docker Mailserver README
  4. mailcow README and support links
  5. Mailu latest release notes
  6. Repository facts

More self-hosted reviews

immich-go · itsaplan · playport · edge-smart-doh · Comma · ProsperoEden · the whole board →