Patrick Asmus (scriptos) 838e702cf0
All checks were successful
Build Test Docker Image / docker-test (pull_request) Successful in 1m54s
Run Tests / test (pull_request) Successful in 4m49s
feat: MAILCOW_RESOLVE_HOST für internes DNS-Routing hinzufügen
2026-03-28 14:30:57 +01:00
2025-11-11 13:41:51 +01:00
2025-11-11 13:41:51 +01:00
2025-11-11 13:41:51 +01:00
2026-03-28 13:19:28 +01:00
2025-11-17 15:42:54 +01:00

Mailcow Birthday Daemon 🎂

Fork-Hinweis: Dieses Projekt ist ein Fork von Marco98/mailcow-birthday-daemon und wird hier eigenständig weiterentwickelt.

Ein einfacher Daemon, der automatisch einen Geburtstagskalender für jede Mailcow-Mailbox erzeugt und synchronisiert.

Es ist kein Benutzereingriff erforderlich. Alles wird vollautomatisch erledigt.

Installation

Den folgenden Abschnitt in die docker-compose.override.yml einfügen:

services:
    birthdaydaemon:
        image: git.techniverse.net/scriptos/mailcow-birthday-daemon:latest
        restart: always
        depends_on:
            - nginx-mailcow
        networks:
            - mailcow-network
        environment:
            - MAILCOW_BASE=https://mail.example.com
            - MAILCOW_APIKEY=DEIN-APIKEY-HIER
            - MAILCOW_RESOLVE_HOST=nginx-mailcow
        volumes:
            - birthdaydaemon:/data

volumes:
    birthdaydaemon:

Wichtig: mail.example.com muss durch den tatsächlichen FQDN der eigenen Mailcow-Instanz ersetzt werden. MAILCOW_RESOLVE_HOST=nginx-mailcow sorgt dafür, dass der Daemon den Mailcow-Nginx innerhalb des Docker-Netzes direkt erreicht, anstatt über die öffentliche IP zu gehen (Hairpin-NAT-Problem). TLS-SNI und Zertifikatsprüfung verwenden weiterhin den Hostnamen aus MAILCOW_BASE.

Tipp: Statt :latest kann auch eine feste Version wie :1.0.0 verwendet werden.

Den API-Key findet man im Admin-Panel unter Konfiguration > Zugang > Administratordetails bearbeiten > API > Lese-/Schreibzugriff.

Da die Mailcow-API derzeit nicht vollständig ist und sich eher im Early-Access-Stadium befindet, wird dringend davon abgeraten, die Option „IP-Prüfung für API überspringen" zu aktivieren.

Konfiguration (Umgebungsvariablen)

Variable Pflicht Standardwert Beschreibung
MAILCOW_BASE Ja Basis-URL der Mailcow-Instanz (z. B. https://mailcow.example.com)
MAILCOW_APIKEY Ja API-Key mit Lese-/Schreibzugriff aus dem Mailcow-Admin-Panel
MAILCOW_RESOLVE_HOST Nein Interner Hostname für TCP-Verbindungen (z. B. nginx-mailcow). Löst Hairpin-NAT-Probleme in Docker-Netzen. TLS nutzt weiterhin den Hostnamen aus MAILCOW_BASE.
STATEFILE Nein state.json (im Container: /data/state.json) Pfad zur Zustandsdatei, in der App-Passwörter gespeichert werden

Hinweis für bestehende Installationen: Falls der Daemon die Mailcow-API wegen Hairpin-NAT nicht erreichen kann, muss lediglich MAILCOW_RESOLVE_HOST=nginx-mailcow als Umgebungsvariable ergänzt werden. Details siehe Installationsabschnitt.

Funktionsweise

  • Über die Mailcow-API wird für jeden aktiven Benutzer ein App-Passwort mit Zugriff auf CardDAV und CalDAV erzeugt.
    • Da jedes App-Passwort in Mailcow eine global hochzählende Nummer erhält, werden die Passwörter auf der Festplatte gespeichert, um das unnötige Ansteigen dieser Nummer zu vermeiden.
  • Alle Kontakte aus sämtlichen Adressbüchern werden abgerufen und die Geburtstagsinformationen je Benutzer extrahiert.
  • Die daraus resultierenden Kalendereinträge werden im Voraus berechnet.
    • Aktuell fest eingestellt: 1 Jahr in der Vergangenheit, 10 Jahre in der Zukunft.
    • Selbstverständlich pro Mailbox isoliert ein Benutzer sieht nur die Geburtstage seiner eigenen Kontakte.
  • Die berechneten Ereignisse werden in einen Kalender namens „Birthdays" in jeder Mailbox synchronisiert (der Anzeigename kann vom Benutzer in SOGo umbenannt werden).
  • Der Synchronisationszyklus läuft alle 15 Minuten automatisch.
Description
Sehr einfacher Daemon, der für jedes Mailcow-Postfach einen Geburtstagskalender erzeugt und synchronisiert.
Readme MIT 502 KiB
v0.4.2 Latest
2026-03-30 09:06:17 +00:00
Languages
Go 99.1%
Dockerfile 0.9%