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.git
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.de
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: true
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: true
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-c
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)
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