• v0.8.0-beta.2 a3e49b2458

    v0.8.0-beta.2 (Beta) Pre-release

    julian released this 2026-11-04 20:22:41 +01:00 | 5 commits to main since this release

    Release Notes — v0.8.0-beta.2

    Status: Vorabversion (Beta / Prerelease). Nicht produktionsreif, nicht vollständig getestet.
    Datum: 2026-11-04

    Behoben in 0.8.0-beta.2

    Windows-Startproblem (WinError 10013 / belegter Port).
    Die Vorgängerversion 0.8.0-beta.1 band fest an 127.0.0.1:8000. War der Port
    belegt oder durch eine Windows-Richtlinie gesperrt, initialisierte sich die
    Anwendung vollständig und beendete sich anschließend mit Exit-Code 3 — ohne
    brauchbare Meldung.

    Jetzt gilt:

    • Bevorzugt wird weiterhin Port 8000 (bzw. APP_PORT).
    • Ist er belegt oder gesperrt, prüft der Start automatisch die folgenden Ports
      (8001 … 8025) und verwendet den ersten freien.
    • Die Meldung nennt den Grund und den tatsächlich verwendeten Port:
      [Hinweis] Port 8000 ist belegt oder gesperrt — verwende 8001.
    • Ist kein Port frei, endet der Start mit Exit 3 und einer verständlichen
      Meldung samt Hinweis auf APP_PORT.
    • Der Browser wird erst geöffnet, nachdem der Server tatsächlich lauscht —
      mit der real verwendeten Portnummer.
    • Eine zweite Instanz auf demselben Datenverzeichnis wird vor dem Start
      erkannt (Exit 4, mit PID und Pfad der Sperrdatei).
    • Weicht der Port von APP_BASE_URL ab, wird ausdrücklich auf die dann
      notwendige Microsoft-Redirect-URI hingewiesen. Die Anwendung ändert keine
      OAuth-Einstellungen automatisch.
    • start.bat und start.sh delegieren an dieselbe Logik (python -m app.launcher);
      keine Windows-Firewall- oder Systemänderungen.

    Neue Funktionen (aus 0.8.0-beta.1)

    • Migration von Microsoft-365-Postfächern über IMAP (OAuth2/XOAUTH2, MSAL,
      Auth-Code-Flow mit PKCE) auf beliebige IMAP-Ziele mittels imapsync.
    • Verwaltung von Tenants, Microsoft-Konten, IMAP-Zielen und Jobs; verschlüsselte
      Token-Caches (Fernet) und Zielpasswörter.
    • Persistente Warteschlange mit Parallelität, Prioritäten, Zeitplänen,
      Wiederholungen mit exponentiellem Backoff und Wiederherstellung nach Neustart.
    • React-Weboberfläche (Dashboard, Postfächer, Assistent, Migrationen, Queue,
      Laufdetails mit Logs, Microsoft-Verwaltung, Ziele, Einstellungen, Dark/Light).
    • Betrieb ohne Docker: setup.bat/setup.sh, start.bat/start.sh, lokal auf
      127.0.0.1, ein Worker.

    Unterstützte Betriebssysteme

    Plattform Status
    Windows 10/11, Windows Server 2019+ getestet (Installation, Start mit Portausweichen, Migration lokal)
    Debian 12 / Ubuntu 22.04+ vorbereitet, nicht getestet (keine Linux-Umgebung verfügbar)

    Installation

    Windows:

    M365-to-Exchange-Sync-Windows.zip entpacken
    setup.bat        (fragt nach einem Administratorpasswort, mind. 12 Zeichen)
    start.bat        → Konsole nennt die tatsächliche URL, z. B. http://127.0.0.1:8001
    

    Linux (Debian/Ubuntu):

    tar xzf M365-to-Exchange-Sync-Linux.tar.gz
    cd M365-to-Exchange-Sync
    ./setup.sh && ./start.sh
    

    Kein Docker, keine Administratorrechte für die Anwendung, Node.js nicht
    erforderlich (React-Build ist enthalten).

    Voraussetzungen

    • Python 3.12 oder neuer.
    • imapsync (Perl-Skript bzw. imapsync.exe), getestet mit 2.326; empfohlen:
      Strawberry Perl (portable) + cpanm-Module, siehe docs/INSTALL_WINDOWS.md.
    • Für die Microsoft-Anmeldung: eigene Entra-App-Registrierung (Public Client,
      Redirect-URI http://127.0.0.1:<port>/api/v1/oauth/callback, Scope
      https://outlook.office.com/IMAP.AccessAsUser.All), siehe docs/ENTRA_SETUP.md.
      Wird ein Ausweichport verwendet, muss diese URI mit dem tatsächlichen Port
      übereinstimmen — oder APP_PORT auf den registrierten Port festlegen.

    Getestete Funktionen

    • Startlogik (neu): 25 automatisierte Tests zu Portauswahl, WinError 10013,
      belegtem Port, Fallback, Browser-Öffnung erst nach Bereitschaft, fehlendem
      freien Port, zweiter Instanz und sauberem Herunterfahren (echter uvicorn-Start,
      Health-Check 200, Port nach dem Beenden wieder bindbar).
    • Installation aus dem Release-Archiv in einem leeren Verzeichnis, ohne
      APP_PORT: Der Start wählt wegen des lokal gesperrten Ports 8000 automatisch
      einen Ausweichport; Health, Oberfläche, Login und CRUD funktionieren dort.
      Zweite Instanz wird abgewiesen, Neustart nach hartem Abbruch funktioniert.
    • Echtes imapsync 2.326 gegen zwei lokale IMAP-Server: 12 Nachrichten,
      Ordnerstruktur inkl. Unterordner, \Seen, zweiter Lauf ohne Duplikate,
      Abbruch + Fortsetzung bis 72/72.
    • Automatisierte Tests: 279 Backend-Tests (3 übersprungen), 35 Frontend-Tests,
      TypeScript-Prüfung, Produktionsbuild.

    Nicht getestete Funktionen

    • Microsoft-365-Live-Anmeldung und -Migration: kein Testkonto, keine
      Entra-App verfügbar. OAuth ist implementiert und mit Mocks getestet, nicht
      live verifiziert
      .
    • Linux-Betrieb: Skripte und Rechtebehandlung sind vorbereitet, nie
      ausgeführt (insbesondere die neue Portlogik unter Linux).
    • Browser-Klicktest: nicht durchgeführt (Testumgebung blockiert Loopback);
      ersetzt durch Komponententests und HTTP-Integrationstests.
    • Strg+C unter Windows in einer echten Konsole: nicht als Testfall
      reproduziert. Das geordnete Herunterfahren wurde in-process mit echtem uvicorn
      geprüft (Server stoppt, Port wird freigegeben); harter Abbruch und Neustart
      wurden im Installationsarchiv getestet.

    Bekannte Einschränkungen

    • Genau eine Backend-Instanz pro Datenverzeichnis (Sperrdatei data/queue.lock).
    • Der Ausweichport ist nicht dauerhaft: Nach einem Neustart wird erneut ab 8000
      gesucht. Für eine fest registrierte OAuth-Redirect-URI APP_PORT setzen.
    • imapsync ist nicht enthalten und muss separat installiert werden.
    • Mehrere imapsync-Installationen im PATH: IMAPSYNC_PATH in .env setzen.
    • Shared Mailboxes werden nicht zugesagt (delegierter Zugriff nicht getestet).

    Bekannte Fehler

    Keine kritischen Fehler bekannt. Beobachtet:

    • 502 oauth_provider_unavailable ohne konfigurierte Client-ID bzw. ohne
      Internetzugang zur Microsoft-Discovery (erwartetes Verhalten).
    • Ein fremdes imapsync.bat im Benutzerprofil kann als „inkompatibel (0.22)“
      erkannt werden; Abhilfe: IMAPSYNC_PATH setzen.

    Sicherheitshinweise

    • Die Anwendung fragt keine Microsoft-Passwörter ab und speichert sie nicht.
    • Tokens und Zielpasswörter liegen ausschließlich verschlüsselt in der lokalen
      SQLite-DB; der Schlüssel steht in .env (APP_ENCRYPTION_KEY).
    • Temporäre Token-/Passwortdateien: 0600 (Windows: DACL nur Benutzer/SYSTEM/
      Administratoren), Löschung nach jedem Lauf.
    • Logs werden vor dem Schreiben redigiert (Bearer, XOAUTH2, Passwörter).
    • Die Anwendung bindet nur an 127.0.0.1; die Portauswahl ändert keine
      Firewall- oder Systemeinstellungen.
    • Keine Standard-Zugangsdaten: Setup erzeugt ein zufälliges Startpasswort oder fragt ab.

    Lizenz

    Der eigene Quellcode steht unter der MIT-Lizenz (LICENSE). imapsync wird
    nicht gebündelt; Python-Pakete werden beim Setup von PyPI installiert;
    Frontend-Bibliotheken (MIT/ISC) sind im Build enthalten. Details: LICENSE.md.

    Upgrade von 0.8.0-beta.1

    data/ und .env bleiben gültig; Datenbankmigrationen laufen automatisch.
    Nach dem Update start.bat bzw. start.sh verwenden — die Startskripte rufen
    jetzt python -m app.launcher auf. Ein bereits laufender Server sollte vorher
    beendet werden.

    Prüfsummen

    SHA256SUMS.txt enthält die SHA-256-Werte für beide Archive und diese Release Notes.

    Downloads