This guide covers configuration of mailcow: dockerized after initial installation.
https://mail.example.comadminmoohoo (change immediately!)Critical: Change the default admin password immediately!
# Via mailcow UI: Admin → Password
# Or via CLI:
cd /opt/mailcow-dockerized
docker compose exec mysql-mailcow mysql -u root -p"$DBROOT"
example.com)mailcow will show required DNS records for your domain:
# A Record
mail.example.com. IN A <your-server-ip>
# MX Record
example.com. IN MX 10 mail.example.com.
# SPF Record (prevents spoofing)
example.com. IN TXT "v=spf1 mx a -all"
# DKIM Record (email signing)
dkim._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
# DMARC Record (policy)
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
# Optional: MTA-STS
_mta-sts.example.com. IN TXT "v=STSv1; id=20240101"
# View DKIM record for domain
docker compose exec rspamd-mailcow rspamadm dkim_keygen -d example.com
# Or via mailcow UI: Configuration → Mail Setup → Domains → Edit → DKIM
mailcow automatically generates DKIM keys:
Configure spam filtering:
Set mailbox quotas:
mailcow enforces TLS by default:
mailcow automatically obtains Let’s Encrypt certificates:
# Check certificate status
docker compose logs acme-mailcow
# Force certificate renewal
docker compose restart acme-mailcow
# View certificate
docker compose exec nginx-mailcow cat /etc/ssl/mailcow/cert.pem | openssl x509 -text
Enable TFA for admin accounts:
Configure spam quarantine:
Create catch-all addresses for spam:
Configure spam tagging behavior:
***SPAM*** to subjectMigrate mailboxes from other servers:
Configure CalDAV/CardDAV:
Main configuration file:
# Location
/opt/mailcow-dockerized/mailcow.conf
# Key settings
MAILCOW_HOSTNAME=mail.example.com
DBROOT=secure_password
DBPASS=secure_password
REDISPASS=secure_password
SKIP_IPV6=true
TZ=Europe/Berlin
Custom Docker settings:
# Location
/opt/mailcow-dockerized/docker-compose.override.yml
# Example: Resource limits
version: '3.8'
services:
clamav-mailcow:
deploy:
resources:
limits:
memory: 2G
cpus: '2.0'
Custom Nginx configuration:
# Location
/opt/mailcow-dockerized/data/conf/nginx
# Add custom site configs here
Custom Postfix settings:
# Location
/opt/mailcow-dockerized/data/conf/postfix
# Add custom main.cf settings
Custom Dovecot settings:
# Location
/opt/mailcow-dockerized/data/conf/dovecot
# Add custom sieve scripts
cd /opt/mailcow-dockerized
# Add domain
./mailcow-helper.sh add_domain example.com
# Add mailbox
./mailcow-helper.sh add_mailbox user@example.com password quota
# Reset admin password
./mailcow-helper.sh reset_admin_password new_password
# Show configuration
./mailcow-helper.sh show_config
# Restart specific service
docker compose restart dovecot-mailcow
# View logs
docker compose logs -f rspamd-mailcow
# Enter container
docker compose exec postfix-mailcow bash
# Check service health
docker compose ps
# Access MariaDB
docker compose exec mysql-mailcow mysql -u root -p"$DBROOT"
# Common queries
USE mailcow;
SELECT * FROM domain;
SELECT * FROM mailbox;
SELECT * FROM alias;
# All services
docker compose logs -f
# Specific service
docker compose logs -f postfix-mailcow
docker compose logs -f dovecot-mailcow
docker compose logs -f rspamd-mailcow
# Follow multiple services
docker compose logs -f postfix-mailcow dovecot-mailcow
# Watchdog health
docker compose exec watchdog-mailcow /usr/local/bin/healthcheck.sh
# Check container status
docker compose ps
# Check resource usage
docker stats
Access Rspamd dashboard:
cd /opt/mailcow-dockerized
# Stop mailcow
docker compose down
# Backup critical volumes
docker run --rm \
-v mailcowdockerized_crypt-vol-1:/crypt:ro \
-v /backup:/backup \
alpine tar czf /backup/crypt-vol-1-$(date +%Y%m%d).tar.gz -C /crypt .
docker run --rm \
-v mailcowdockerized_mysql-vol-1:/mysql:ro \
-v /backup:/backup \
alpine tar czf /backup/mysql-vol-1-$(date +%Y%m%d).tar.gz -C /mysql .
docker run --rm \
-v mailcowdockerized_vmail-vol-1:/vmail:ro \
-v /backup:/backup \
alpine tar czf /backup/vmail-vol-1-$(date +%Y%m%d).tar.gz -C /vmail .
# Restart mailcow
docker compose up -d
See mailcow Docker Setup for backup scripts.
# Check mailcow configuration
cd /opt/mailcow-dockerized
docker compose config
# Validate DNS
docker compose exec unbound-mailcow dig example.com MX
# Test SMTP
telnet mail.example.com 25
Mail not delivering:
Login failures:
SSL certificate issues:
Any questions?
Feel free to contact us. Find all contact information on our contact page.