• v0.8.0-beta.1 757e64d90b

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

    julian released this 2026-11-04 19:54:54 +01:00 | 8 commits to main since this release

    Release Notes — v0.8.0-beta.1

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

    Neue Funktionen

    • Migration von Microsoft-365-/Exchange-Online-Postfächern über IMAP (OAuth2/XOAUTH2)
      auf beliebige IMAP-Ziele (Mailcow, Dovecot, Cyrus) mit imapsync.
    • Microsoft-Anmeldung über MSAL (Authorization Code Flow mit PKCE, Public Client),
      verschlüsselter Token-Cache pro Identität, automatischer Token-Refresh.
    • Postfachverwaltung: Tenants, Microsoft-Konten, IMAP-Zielserver, Migrationsjobs.
    • Migrationsengine: imapsync-Erkennung (Version + Pflichtoptionen), Secret-Dateien mit
      restriktiven Rechten, Log-Redaktion, Exit-Code-Mapping, Abbruch, Zeitlimit.
    • Persistente Warteschlange: Parallelität (Standard 2), Prioritäten, Pause/Fortsetzen,
      Zeitpläne je Job, Wiederholungen mit exponentiellem Backoff, Recovery nach Neustart.
    • Weboberfläche (React/TypeScript): Dashboard, Postfächer, Assistent, Migrationen,
      Warteschlange, Laufdetails mit Logs, Microsoft-365-Verwaltung, Zielserver, Einstellungen,
      Dark/Light-Mode, deutsch.
    • Betrieb ohne Docker: setup.bat/setup.sh, start.bat/start.sh, ausschließlich
      127.0.0.1:8000, ein Worker, keine automatischen Reloads.

    Unterstützte Betriebssysteme

    Plattform Status
    Windows 10/11, Windows Server 2019+ getestet (Installation, Start, 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        → http://127.0.0.1:8000
    

    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. Der React-Build ist enthalten —
    Node.js wird nicht benötigt.

    Voraussetzungen

    • Python 3.12 oder neuer.
    • imapsync (Perl-Skript bzw. imapsync.exe), Version ≥ 2.200, 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:8000/api/v1/oauth/callback, Scope
      https://outlook.office.com/IMAP.AccessAsUser.All), siehe docs/ENTRA_SETUP.md.
      Ohne Client-ID startet die Anwendung, die Anmeldung ist dann deaktiviert.

    Getestete Funktionen

    • Echtes imapsync 2.326 (Strawberry Perl 5.42.3, portable) gegen zwei lokale
      IMAP-Server (Greenmail): 12 Nachrichten vollständig übertragen, Ordnerstruktur
      inklusive Unterordner, \Seen-Flag übernommen, zweiter Lauf ohne Duplikate
      (0 messages transferred), Abbruch mitten im Lauf und Fortsetzung bis 72/72.
    • Installation aus dem Release-Archiv in einem leeren Verzeichnis: Setup, Login,
      Weboberfläche, Tenant/Zielserver/Konto/Job anlegen, Neustart mit erhaltenen Daten,
      zweites Setup ohne Änderungen an .env, keine Secrets in Logs.
    • Automatisierte Tests: 254 Backend-Tests (3 übersprungen), 35 Frontend-Tests,
      TypeScript-Prüfung, Produktionsbuild, Release-Archivprüfung.

    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.
      Ohne Entra-Konfiguration antwortet POST /identities/{id}/authorize mit
      502 oauth_provider_unavailable.
    • Linux-Betrieb: Skripte und Pfad-/Rechtebehandlung sind vorbereitet, aber nie
      ausgeführt. Linux gilt ausdrücklich nicht als getestet.
    • Browser-Klicktest: nicht durchgeführt (Testumgebung blockiert Loopback-Adressen);
      ersetzt durch Komponententests und einen HTTP-Integrationstest.
    • Token-Ablauf während eines langen Laufs: Mechanismus (Refresh + atomarer
      Dateiaustausch) ist getestet, das reale Verhalten gegen Exchange Online nicht.
    • TLS gegen produktive Zertifikate: Testserver nutzten selbstsignierte Zertifikate.

    Bekannte Einschränkungen

    • Genau eine Backend-Instanz pro Datenverzeichnis (Sperrdatei data/queue.lock);
      mehrere Worker/Hosts werden nicht unterstützt (SQLite).
    • Standardport 8000 kann durch lokale Richtlinien gesperrt sein (APP_PORT setzen);
      python -m app.cli check warnt dann.
    • imapsync ist nicht enthalten und muss separat installiert werden.
    • Werden mehrere imapsync-Versionen im PATH gefunden, kann die falsche erkannt werden —
      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, wird in der Oberfläche erklärt).
    • 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). Verlust des Schlüssels macht
      gespeicherte Geheimnisse unlesbar — .env sichern.
    • Temporäre Token-/Passwortdateien: 0600 in data/tmp/<run-id>/, unter Windows
      explizite 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. Für Netzwerkzugriff ist ein HTTPS-Reverse-Proxy
      erforderlich; ohne HTTPS wird das Session-Cookie ohne Secure gesetzt.
    • Keine Standard-Zugangsdaten: Setup erzeugt ein zufälliges Startpasswort oder fragt ab.

    Lizenzstatus

    Der Quellcode dieses Projekts steht unter der MIT-Lizenz (LICENSE).
    imapsync wird nicht gebündelt (eigene Lizenz des Autors, extern zu installieren);
    Python-Abhängigkeiten werden beim Setup von PyPI installiert; Frontend-Bibliotheken
    (MIT/ISC) sind im Build enthalten. Details: LICENSE.md.

    Upgrade-Hinweis

    Vorhandene data/- und .env-Dateien werden beim Setup nicht überschrieben. Vor einem
    Wechsel die Verzeichnisse sichern. Datenbankmigrationen laufen automatisch
    (python -m app.cli init).

    Prüfsummen

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

    Downloads