Skip to content

CLI Commands

All commands run via docker exec since services run inside containers. Replace <container_name> with the actual name (usually the service name from docker-compose.yml).

Postfix

Queue Management

Bash
# View the mail queue
docker exec -it postfix postqueue -p

# Count messages in queue
docker exec -it postfix postqueue -p | tail -1

# Flush the queue (retry all deferred messages)
docker exec -it postfix postqueue -f

# View a specific queued message
docker exec -it postfix postcat -q QUEUE_ID

# Delete a specific message
docker exec -it postfix postsuper -d QUEUE_ID

# Delete ALL messages (careful!)
docker exec -it postfix postsuper -d ALL

# Delete all deferred messages only
docker exec -it postfix postsuper -d ALL deferred

# Put a message on hold
docker exec -it postfix postsuper -h QUEUE_ID

# Release a held message
docker exec -it postfix postsuper -H QUEUE_ID

# Requeue a message (reprocesses it)
docker exec -it postfix postsuper -r QUEUE_ID

Configuration

Bash
# Show all Postfix config (effective values)
docker exec -it postfix postconf

# Show a specific setting
docker exec -it postfix postconf smtpd_tls_cert_file

# Show non-default settings only
docker exec -it postfix postconf -n

# Check config for errors
docker exec -it postfix postfix check

# Reload config without restarting
docker exec -it postfix postfix reload

Logs and Diagnostics

Bash
# View recent mail log
docker exec -it postfix tail -100 /var/log/postfix/maillog

# Search for a specific email
docker exec -it postfix grep "user@example.com" /var/log/postfix/maillog

# Search by message ID
docker exec -it postfix grep "MESSAGE_ID" /var/log/postfix/maillog

# Check TLS
docker exec -it postfix postconf smtpd_tls_protocols

Dovecot

User Management

Bash
# List all authenticated users
docker exec -it dovecot doveadm who

# Check a user's mail location
docker exec -it dovecot doveadm user user@example.com

# Check a user's quota
docker exec -it dovecot doveadm quota get -u user@example.com

# Recalculate quota
docker exec -it dovecot doveadm quota recalc -u user@example.com

Mailbox Operations

Bash
# List a user's mailboxes
docker exec -it dovecot doveadm mailbox list -u user@example.com

# Check mailbox status
docker exec -it dovecot doveadm mailbox status -u user@example.com messages INBOX

# Search for messages
docker exec -it dovecot doveadm search -u user@example.com mailbox INBOX subject "test"

# Force mailbox index rebuild
docker exec -it dovecot doveadm index -u user@example.com INBOX

# Purge expunged messages
docker exec -it dovecot doveadm purge -u user@example.com

Diagnostics

Bash
# Check Dovecot config
docker exec -it dovecot doveconf -n

# Check a specific setting
docker exec -it dovecot doveconf mail_location

# List active connections
docker exec -it dovecot doveadm who

# Check for errors
docker exec -it dovecot doveadm log errors

# Reload config
docker exec -it dovecot doveadm reload

Rspamd

Status and Statistics

Bash
# Overall status
docker exec -it rspamd rspamc stat

# Detailed statistics
docker exec -it rspamd rspamc counters

# Check a specific symbol
docker exec -it rspamd rspamc counters | grep DKIM

# History of recent scans
docker exec -it rspamd rspamc history

Spam Learning

Bash
# Learn a message as spam
docker exec -it rspamd rspamc learn_spam < spam_message.eml

# Learn a message as ham (not spam)
docker exec -it rspamd rspamc learn_ham < good_message.eml

# Check Bayesian statistics
docker exec -it rspamd rspamc stat | grep -A5 "Statfile"

DKIM

Bash
# List DKIM keys
docker exec -it rspamd ls -la /var/lib/rspamd/dkim/

# Check DKIM signing config
docker exec -it rspamd cat /etc/rspamd/local.d/dkim_signing.conf

Configuration

Bash
# Dump effective config
docker exec -it rspamd rspamadm configdump

# Check config for errors
docker exec -it rspamd rspamadm configtest

# Reload without restart
docker exec -it rspamd rspamc reload

MySQL

Quick Queries

Bash
# Connect to MySQL shell
docker exec -it mysql mysql -u root -p"${DB_ROOT_PASSWORD}" mailserver

# One-liner queries
docker exec -it mysql mysql -u root -p"${DB_ROOT_PASSWORD}" mailserver -e "SELECT COUNT(*) FROM domains;"

Useful Queries

Bash
# Count all entities
docker exec -it mysql mysql -u root -p"${DB_ROOT_PASSWORD}" mailserver -e "
SELECT
  (SELECT COUNT(*) FROM organizations) AS orgs,
  (SELECT COUNT(*) FROM domains) AS domains,
  (SELECT COUNT(*) FROM email_accounts) AS mailboxes,
  (SELECT COUNT(*) FROM aliases) AS aliases;
"

# Check mail queue
docker exec -it mysql mysql -u root -p"${DB_ROOT_PASSWORD}" mailserver -e "
SELECT status, COUNT(*) AS count
FROM mail_queue
GROUP BY status;
"

# Storage usage by domain
docker exec -it mysql mysql -u root -p"${DB_ROOT_PASSWORD}" mailserver -e "
SELECT domain, total_storage_used, total_email_accounts
FROM domains
ORDER BY total_storage_used DESC
LIMIT 10;
"

# Recent bounces
docker exec -it mysql mysql -u root -p"${DB_ROOT_PASSWORD}" mailserver -e "
SELECT sender, recipient, bounce_reason, timestamp
FROM mail_logs
WHERE status = 'bounced'
ORDER BY timestamp DESC
LIMIT 10;
"

# Database size
docker exec -it mysql mysql -u root -p"${DB_ROOT_PASSWORD}" -e "
SELECT TABLE_NAME, ROUND(DATA_LENGTH/1024/1024, 2) AS data_mb, TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mailserver'
ORDER BY DATA_LENGTH DESC;
"

Maintenance

Bash
# Check table integrity
docker exec -it mysql mysqlcheck -u root -p"${DB_ROOT_PASSWORD}" mailserver

# Optimize tables
docker exec -it mysql mysqlcheck -u root -p"${DB_ROOT_PASSWORD}" --optimize mailserver

# Backup
docker exec mysql mysqldump -u root -p"${DB_ROOT_PASSWORD}" --single-transaction mailserver > backup.sql

Redis

Bash
# Connect to Redis CLI
docker exec -it redis redis-cli

# Check memory usage
docker exec -it redis redis-cli info memory

# List all keys (careful in production — blocks)
docker exec -it redis redis-cli --scan --pattern "mailyte:*" | head -20

# Check rate limit counters
docker exec -it redis redis-cli --scan --pattern "rate:*" | head -10

# Get a specific key
docker exec -it redis redis-cli GET "some:key"

# Monitor commands in real time
docker exec -it redis redis-cli monitor

# Flush all data (nuclear option)
docker exec -it redis redis-cli FLUSHALL

Docker Compose

Bash
# Start everything
docker compose up -d

# Stop everything
docker compose down

# Restart a specific service
docker compose restart postfix

# View logs for a service
docker compose logs -f postfix

# Rebuild and restart a service
docker compose up -d --build api

# Check resource usage
docker stats --no-stream