The history of PostfixAdmin: the virtual user's service counter

Mascote do LinuxPro no balcão do correio, abrindo uma caixa postal de latão e colocando um envelope — o usuário virtual do PostfixAdmin

In 2002 Mischa Peters, of High5!, released a PHP interface to avoid editing MySQL by hand: virtual domains, mailboxes, aliases. He called it PostfixAdmin. GPL. Postfix handled delivery; the service counter was missing. Twenty-four years later PostfixAdmin 4.0.5 (5 July 2026) is still that counter — now with TOTP, app passwords, DKIM, Smarty, postfixadmin-cli and PHP 8. The wall of brass mailboxes on the cover is literal: each drawer is a virtual user.

High5!, 2002: the virtual user gets a web interface

Postfix has spoken maps since 1998. virtual_mailbox_maps, virtual_alias_maps — file, hash, MySQL. Someone hosting dozens of domains doesn't want to run INSERT in mysql and then a postmap . Mischa Peters built the interface. Copyright 2002–2005 High5!. INSTALL.md still opens with his name. Requirements back then: Apache, PHP, MySQL or PostgreSQL, and Perl for vacation. IMAP on the other side could be Courier; what caught on was Dovecot, reading the same table.

The classic setup — the “PFA stack” — remained: Postfix on 25/587, Dovecot on 143/993, SASL in Dovecot, SQL maps in Postfix, passwords in the same hash IMAP accepts. PHP only writes the row. Superadmins create domains and admins. Domain admins manage only what they've been given. Users change passwords, forward mail and enable vacation replies. Since 2.2.0 login has been unified: the duplicate /admin was removed; everyone goes through the same login.php.

Christian Boltz, GingerDog and SourceForge

Christian Boltz (openSUSE, cboltz) joined as a user: in September 2006 he dropped Plesk for PostfixAdmin, started submitting patches and never stopped. David Goodwin (gingerdog) is the other name on the plaque. SourceForge registered the project on 20 March 2007; the code was already five years old. Mailing list, wiki, RPM. In 2012 version 2.3.5 fixed SQL injection and XSS — Boltz requested a CVE on oss-sec. 2.3.x was the long-lived stable branch.

3.0 took years. In beta for more than two. On 11 September 2016 Boltz removed the label: 3.0 stable. Rewritten around *Handler classes (web and CLI sharing the same code), edit.php a generic interface instead of one PHP file per object, Smarty, postfixadmin-cli, SQLite, the $CONF['*_struct_hook'] hook for extra fields. Vacation replies with start and end dates. Fetchmail. Domain aliases. 2.3 still received critical fixes for a while; the message was to upgrade.

GitHub, 3.3 and the password hash

The git repository moved to github.com/postfixadmin/postfixadmin. SourceForge became a “the project moved” sign. 3.3 remained the branch for old PHP (7.0+). 3.3.16 came out on 9 September 2025, for those unable to make the jump. The password hash is what breaks installations: Dovecot must read what PHP writes. doveadm pw was a crutch for years — proc_open, permissions, pain. Around 2023 the pacrypt native PHP implementation began covering MD5-CRYPT, SHA512-CRYPT, bcrypt, Argon2i/id, SSHA. 4.0 almost drops doveadm. Getting the $CONF['encrypt'] wrong is the classic way to make IMAP say “invalid password” while the admin swears they typed it correctly.

4.0: TOTP, DKIM, Composer

4.0.0 stayed a draft. Boltz spotted a detail; Goodwin published 4.0.1 on 14 September 2025 as the first real v4. SemVer since June 2025. What was added:

  • TOTP at login (admin and mailbox), with IP exemptions. PR by Sven Seeberg / verdigado.
  • Application passwords — the phone doesn't carry the panel's authentication factor.
  • Domain DKIM key in the database, for OpenDKIM to read.
  • install.sh + Composer: Smarty and the rest no longer come “loose”.
  • CSP, stricter session cookies, dark theme.
  • Minimum PHP 7.4 in 4.0.x; master requires 8.2+.
  • Revised vacation.pl. The XML-RPC API still exists for automation.

4.0.5 (5 July 2026) handles expired sessions with invalid tokens and packages a PHP 8.4 build with a new spomky-labs/otphp (TOTP CVE from 4.0.4). Two tarballs: one for 7.4, another for 8.4. Debian already packages 4.0.1+ds. Ubuntu 26.04 howtos point to 4.0.5 + Nginx + Let's Encrypt + MySQL.

What PFA isn't

It isn't Postfix. It isn't Dovecot. It doesn't deliver mail or speak IMAP. It writes the table both read. Quotas, password expiry (beta), Roundcube/SquirrelMail on the side. Anyone wanting Zimbra buys the integrated stack — this blog's old take is in Zimbra 8 on Ubuntu. Anyone wanting “real” mail, Linux, SQL maps, gets this trio: Postfix + Dovecot + PostfixAdmin.

Wrap-up

A Dutchman from High5!, a PHP interface from 2002 and a refusal to let the customer run GRANT in MySQL. Boltz and Goodwin held it together for two decades. 4.0.5, GPL, TOTP, brass mailboxes. The canal in the window is the origin. Tux on the tile. The virtual user finally has a service counter.

The MTA: The history of Postfix. The IMAP server: The history of Dovecot.