====== Docker: Dovecot ====== Dovecot ( [[https://doc.dovecot.org|https://doc.dovecot.org]] ) is a small, powerfull, fast and very stable IMAP- Server for storing Mails, which can be used by any Mailclient like Thunderbird, Evolution… ===== Prerequisites ===== You will need all stuff to have [[:content:serverbasics:docker-freeipa|FreeIPA]] up, having understood dockers and running those services, so that LDAPs will work. ===== Docker composer ===== Dovecot does not use any Database, as Mails will be stored in MailDir- Format, which is using Directories and Files for each Mail, so mounting the mail- Directory is enough. In your docker_compose- Directory, create the ''docker-compose.yml'' with the following content: services: # Small but performant and secure Imap- Server: https://hub.docker.com/r/dovecot/dovecot dovecot: image: dovecot/dovecot:latest #For testing: # image: dovecot/dovecot:latest-dev restart: always read_only: true stop_grace_period: 1m volumes: - dovecot_config:/etc/dovecot - dovecot_maildata:/srv/vmail tmpfs: - /tmp - /run/dovecot - /srv/mail environment: # Those passwords shuld not be used/only for testing # They will allow any username with that password to connect USER_PASSWORD: 'VERYSTRONGFIRSTPWD' DOVEADM_PASSWORD: 'VERYSTRONGSECONDPWD' ports: - "993:31993" #Listeners from Homepage # POP3 on 31110, TLS 31995 (needs config file to enable, disabled by default) # IMAP on 31143, TLS 31993 # Submission on 31587 # LMTPS on 31024 # ManageSieve on 34190 # HTTP API on 8080 # Metrics on 9090 networks: - default volumes: dovecot_config: dovecot_maildata: networks: # Still needs to be defined while without it won't enable ipv6 default: driver: bridge enable_ipv6: true Basically, ''docker compose up -d'' will already start your Server. ===== LDAP Password-Checks ===== In your Volume dovecot_config you will now find the directory conf.d - put some file in here like domainname.conf to have it loaded in your dovecot- config. It will overwrite all basic settings. ssl = required auth_allow_cleartext = no #external connection: check SSL validity. Won't validate let's encrypt LDAP- Certs without importing CA ssl_client_require_valid_cert = no ssl_server { cert_file = /etc/dovecot/ssl/domain.tld.crt key_file = /etc/dovecot/ssl/domain.tld.key } #LDAP Auth # Password lookup: will also do full user/pass bind to check, so this should be enough # https://doc.dovecot.org/2.4.1/core/config/auth/databases/ldap.html#authentication-binds #For debugging and also provides useful informations about logins log_debug = category=auth passdb ldap { # will speed up check of user when using multiple queries to ldap-server like userdb- checking too # will slow down if only one check is done per login # use_worker = yes driver = ldap ldap_uris = ldaps://dockerproject-ipa-1:636 bind = yes bind_userdn = uid=%{user},cn=users,cn=accounts,dc=domain,dc=tld filter = (&(objectClass=posixAccount)(uid=%{user})) ldap_base = dc=domain,dc=tld } Change Domain, tld and your docker-hostname to match your needs. ===== SSL Setup ===== Also, you need your ACME- Certificates of Caddy copied to that Volume. I do it with the file ''cert_renew.sh'' #!/bin/bash #Renew ACME Certs of Dovecot from Caddy cat /home/docker/docker_volumes/dockerproject_caddy_data/_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/domain.tld/domain.tld.key> /home/docker/docker_volumes/pcserver2023_dovecot_config/_data/ssl/domain.tld.key cat /home/docker/docker_volumes/dockerproject_caddy_data/_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/domain.tld/domain.tld.crt> /home/docker/docker_volumes/pcserver2023_dovecot_config/_data/ssl/domain.tld.crt which i call every Day with dockers crontab. Make sure that the files are accessible for dovecot (and if possible to noone else, not in container nor on your host). ===== Possible problems ===== Currently (02.08.2025) there are a few problems with Thunderbird and Dovecot. ==== Error: Disconnected: Too many invalid IMAP commands. ==== Have a look at the page beneath to configure Thunderbird with the settings: * mail.server.default.allow_utf8_accept = false * mail.imap.use_literal_plus = false [[https://yellowshoes.de/2025/07/31/thunderbird-dovecot-2-4-disconnected-too-many-invalid-imap-commands/|https://yellowshoes.de/2025/07/31/thunderbird-dovecot-2-4-disconnected-too-many-invalid-imap-commands/]]