Skip to content

About

Professional Email Administration System

Topics

Resources

Contributing

Stars

5 stars

Watchers

1 watching

Forks

Latest commit

 

History

340 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go-PostfixAdmin

Go Version License Release Downloads Release Build Stars

Go-PostfixAdmin dashboard

A modern, single-binary web panel and REST API for Postfix + Dovecot mail servers.
Domains, mailboxes, aliases, admins, RBAC and a self-service user portal — no PHP, no web server, no extra runtime.

⬇ Download the latest release

Quick Start · Screenshots · Features · Full feature list · Setup guide


✨ Why Go-PostfixAdmin?

  • One file to deploy — the Vue 3 UI, Swagger docs and translations are embedded in a single static Go binary. Copy it, point it at your database, run it. Also shipped as Docker image, .deb and .rpm.
  • Fast and lightweight — no PHP-FPM, Apache/Nginx or Node runtime in production — just one Go process.
  • API-first — every action in the UI is available through a documented REST API (/api/v1) with JWT and long-lived API keys, ready for automation and provisioning scripts.
  • Built for teams — superadmins, domain admins and fine-grained RBAC roles decide who can see and change what.
  • Users help themselves — a separate portal lets mailbox owners change their password, set forwarding and configure vacation auto-replies.
  • Familiar data model — PostfixAdmin-style tables (domain, mailbox, alias, …) and $2y$ bcrypt hashes, on MariaDB/MySQL or PostgreSQL.
  • Scriptable CLI — bulk CSV import/export, domain/mailbox/transport management, MySQL backups, quota reports and a Postfix transport_maps TCP server.

🚀 Quick Start

Docker Compose (fastest)

git clone https://github.com/jniltinho/go-postfixadmin.git
cd go-postfixadmin
docker compose up -d

Open http://localhost:8080 — the stack includes MariaDB and creates the first admin automatically (admin@example.com / adminpassword — change it in docker-compose.yml).

Docker

docker run -p 8080:8080 \
  -e DB_URL="postfix:pass@tcp(your-db:3306)/postfix?charset=utf8mb4&parseTime=True" \
  jniltinho/go-postfixadmin:latest

Binary / .deb / .rpm

Download from GitHub Releases, then:

./postfixadmin --generate-config      # writes config.toml — set your database
./postfixadmin migrate                # create / update the schema
./postfixadmin migrate rbac           # optional: RBAC roles and permissions
./postfixadmin admin --add-superadmin admin@example.com:'S3cure!Pass'
./postfixadmin server                 # http://localhost:8080

Swagger UI is available at /swagger/ when server.swagger_enable = true.

Build from source

make build        # builds the Vue 3 frontend and embeds it into bin/postfixadmin
make run

See DEVELOPMENT.md for the full developer workflow.

📸 Screenshots

Administration

Domains Email accounts
Domains Mailboxes
Add email account Add domain
Add email account Add domain
Aliases Domain aliases
Aliases Domain aliases
Administrators RBAC roles
Administrators Roles
Mail delivery log Audit log
Mail log Audit log

User self-service portal

Forwarding & password Vacation auto-reply
User portal Vacation

REST API

Swagger UI

More screenshots (login pages, transports, API keys, create admin/alias…) in DOCUMENTS/screenshots.

🧩 Features

  • Mail management — domains (limits, quotas, backup MX), mailboxes with quota, aliases with multiple recipients, alias domains, per-domain Postfix transports
  • User portal — password change, forwarding, vacation auto-reply via Dovecot Sieve
  • Security — JWT (short-lived access token + httpOnly refresh cookie), CSRF origin check, login rate limiting, strong password policy with built-in generator, persistent API keys with expiry
  • Access control — superadmin / domain-admin separation plus optional fine-grained RBAC roles
  • Operations — admin audit log, mail delivery log ingestion (readlog), quota reports, MySQL/MariaDB backups, optional OpenTelemetry export to OpenObserve
  • i18n — English, Português (pt_BR) and Español
  • Databases — MariaDB/MySQL and PostgreSQL

Complete capability list: FEATURES.md

Documentation

Tech Stack

Backend: Go 1.26, Echo v5, GORM, Cobra, Viper, log/slog, Swaggo (OpenAPI)

Frontend (embedded): Vue 3 + TS + Vite, Pinia, Vue Router, Tailwind CSS v4, Lucide icons

Packaging: Multi-stage Docker, UPX-compressed binary, native .deb/.rpm via Makefile + GitHub Actions

Contributing

If Go-PostfixAdmin is useful to you, please ⭐ the repository — it helps other admins find it.

Contributions are welcome. Please read CONTRIBUTING.md first.

License

Go-PostfixAdmin is an independent project, inspired by and not affiliated with PostfixAdmin.

This project is licensed under the MIT License — see the LICENSE file for details.

OpenTelemetry / OpenObserve

Optional application log, HTTP/database trace and metric export to OpenObserve is available. All export and database tracing switches default to disabled. See configuration and deployment and isolated Docker validation.

Set the OpenObserve authorization header using your ingestion email/password (the credentials below are fictional):

# Fictional credentials: replace with your OpenObserve ingestion credentials.
export OBSERVABILITY_AUTHORIZATION="Basic $(printf '%s' 'telemetry@example.com:example-password' | base64 | tr -d '\r\n')"

Then enable the desired signals and set their endpoints as described in the configuration guide. For Docker, pass this variable into the app service and recreate the container.

About

Professional Email Administration System

Topics

Resources

Contributing

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages