In dieser Anleitung zeige ich euch, wie ihr innerhalb weniger Minuten “getmail” mittels Docker bereitstellen könnt.
Bei “getmail” handelt es sich um ein kleines Python-Skript um Mails von externen Mail-Accounts (wie z.B. GMX oder Gmail) via IMAP abzuholen und diese direkt in eure Mailcow-Inbox zu kopieren. Dabei werden die Mails nicht in einem festen Intervall abgerufen (wie es z.B. in der Mailcow via IMAP-Synchronisierung gehen würde), sondern diese werden direkt nach Empfang im externen Account synchronisiert.
1. Vorraussetzung
- Docker mit Docker Compose installiert (Anleitung für Ubuntu / Debian)
- Mailcow installiert (nach der Anleitung von Christian)
2. Repository klonen und Verzeichnis anlegen
Als ersten Schritt wechseln wir in unser Container-Verzeichnis:
cd /opt/containers
Nun klonen wir das komplette Repository (wir räumen gleich noch auf):
git clone https://github.com/christianbur/docker_projects.gitCode-Sprache: PHP (php)
Danach verschieben wir den Unterordner “getmail” in unsere normale Verzeichnisstruktur:
mv /opt/containers/docker_projects/getmail /opt/containers/getmail
Den ursprünglichen Ordner können wir nun löschen:
rm -rf docker_projects/
3. Anlegen der settings.ini
Die Settings-Datei ist natürlich sehr individuell, da ihr dort eure externen Mail-Accounts eintragen müsst. Beispielhaft könnt ihr in der Datei “settings.ini.example” einige Möglichkeiten finden. Ich zeige euch hier am Beispiel von nicht-existierenden GMX- und Gmail-Accounts wie ihr die Einstellungen treffen könntet.
Wir legen also unsere Settings-Datei an:
nano /opt/containers/getmail/conf/settings.ini
Inhalt der settings.ini
[DEFAULT]
imap_debug: False
imap_move_enable: False
imap_move_folder: getmail
imap_sync_folder: INBOX
imap_ssl: True
lmtp_hostname: dovecot-mailcow
lmtp_port: 24
lmtp_debug: False
[irgendeine_mail_adresse_at_gmail_com]
imap_hostname: imap.gmail.com
imap_port: 993
imap_username: irgendeine-mail-adresse@gmail.com
imap_password: euerganzsicheresgmailpasswort
lmtp_recipient: euer-mail-account@eure-mailcow-domain.de
[irgendeine_mail_adresse_at_gmx_de]
imap_hostname: imap.gmx.net
imap_port: 993
imap_username: irgendeine-mail-adresse@gmx.de
imap_password: euerganzsicheresgmxpasswort
lmtp_recipient: euer-mail-account@eure-mailcow-domain.deCode-Sprache: CSS (css)
Anmerkungen zu den Beispieldaten:
Die Default-Werte funktionieren bei mir genau so. Ich habe die Mailcow so eingerichtet wie in der Mailcow-Anleitung von Christian, daher sollten diese bei euch auch funktionieren.
Die “Überschrift” über den Account-Blöcken (z.B. “[irgendeine_mail_adresse_at_gmail_com]”) ist frei wählbar und später für die Logs wichtig. Die übrigen IMAP-Settings sollten selbsterklärend sein. Diese müsst ihr evtl. bei den Anbietern in den FAQ suchen.
Die Einstellung “lmtp_recipient” entspricht eurer Mail-Adresse bei der Mailcow. Dort landen dann die Mails des jeweiligen externen Accounts.
4. Anlegen der docker-compose.yml
nano /opt/containers/getmail/docker-compose.yml
Inhalt der docker-compose.yml
version: '2.4'
services:
getmail:
image: cb/getmail
container_name: getmail
build: ./Dockerfiles
volumes:
- ./conf/settings.ini:/app/settings.ini:ro
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
restart: always
mem_limit: 100m
mem_reservation: 20m
networks:
getmail:
networks:
getmail:
external: trueCode-Sprache: JavaScript (javascript)
Notwendige Anpassungen:
Die “docker-compose.yml” kann exakt so übernommen werden. Allerdings müsst ihr noch das externe Netzwerk anlegen:
docker network create getmail
5. Editieren der docker-compose.override.yml
nano /opt/containers/mailcow/docker-compose.override.yml
Inhalt der docker-compose.override.yml
version: '3.9'
services:
dovecot-mailcow:
networks:
getmail:
networks:
getmail:
external: trueCode-Sprache: JavaScript (javascript)
Notwendige Anpassungen:
Ihr müsst die relevanten Teile oben in eure Override-Datei hinzufügen. Im Prinzip muss nur das externe “getmail”-Netzwerk definiert werden und Dovecot muss in das “getmail”-Netzwerk rein – mehr braucht es nicht.
6. Mailcow neu starten
cd /opt/containers/mailcow
docker compose down
docker compose up -d
7. “getmail” starten
cd /opt/containers/getmail
docker compose -f docker-compose.yml up -d
Nach einer kurzen Wartezeit könnt ihr dann die Logs des “getmail”-Containers prüfen:
docker logs getmail -f
Zu Beginn werden alle Verbindungen aufgebaut und die Verbindung wird dann mittels IMAP IDLE gehalten. Das kann dann im Log zum Beispiel so aussehen:
2022-10-15 16:38:40,140 - MainThread - INFO: use config file: ./settings.ini
2022-10-15 16:38:45,142 - Thread-user_at_external_mail_server_com - INFO: Start Getmail - server: imap.external-mail-server.com:993, username: user@external-mail-server.com
2022-10-15 16:38:45,494 - Thread-user_at_external_mail_server_com - INFO: Login - status: b'user@external-mail-server.com authenticated (Success)'
2022-10-15 16:38:45,577 - Thread-user_at_external_mail_server_com - INFO: IMAP fetch mail - inital
2022-10-15 16:38:45,689 - Thread-user_at_external_mail_server_com - INFO: Join infinite loop and wait for new mails, cancel with Ctrl-cCode-Sprache: JavaScript (javascript)
Wenn eine neue Mail auf dem externen Account erkannt wurde, steht im Log zum Beispiel dies:
2022-10-16 10:06:11,458 - Thread-user_at_external_mail_server_com - INFO: LMTP deliver: start -- LMTP host: dovecot-mailcow:24
2022-10-16 10:06:11,496 - Thread-user_at_external_mail_server_com - INFO: LMTP deliver: new eMail from: [Irgendjemand <irgendjemand@irgendwo.de>], subject: [Irgendein Betreff]
2022-10-16 10:06:11,515 - Thread-user_at_external_mail_server_com - INFO: IMAP delete: delete email (uid: 1234)Code-Sprache: CSS (css)
So könnt ihr immer prüfen, ob “getmail” eure Mails auch ordnungsgemäß abruft.
8. Quellen
https://github.com/christianbur/docker_projects/blob/master/getmail/INSTALL.TXT

Hallo allerseits,
kurze Frage, jetzt steht in meiner docker-compose.override.yml noch unter networks -> proxy (laut Anleitung hier). Wenn ich getmail integrieren möchte, muss das raus und alles läuft im Netzwerk getmail? Ist das richtig so?
Liebe Grüße
Frank
Hallo Christian,
vielen Dank für die Anleitung – funktioniert super!!!
Gibt es eigentlich noch eine Möglichkeit die importierten Mails durch rspamd zu schicken. Jetzt werden sie ja einfach ohne Tests/Prüfung importiert. Das wäre perfekt wenn es da etwas gäbe. Danke
Grüße