-
v0.8.0-beta.2 (Beta) Pre-release
released this
2026-11-04 20:22:41 +01:00 | 5 commits to main since this releaseRelease Notes — v0.8.0-beta.2
Status: Vorabversion (Beta / Prerelease). Nicht produktionsreif, nicht vollständig getestet.
Datum: 2026-11-04Behoben in 0.8.0-beta.2
Windows-Startproblem (
WinError 10013/ belegter Port).
Die Vorgängerversion0.8.0-beta.1band fest an127.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 aufAPP_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_URLab, wird ausdrücklich auf die dann
notwendige Microsoft-Redirect-URI hingewiesen. Die Anwendung ändert keine
OAuth-Einstellungen automatisch. start.batundstart.shdelegieren 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:8001Linux (Debian/Ubuntu):
tar xzf M365-to-Exchange-Sync-Linux.tar.gz cd M365-to-Exchange-Sync ./setup.sh && ./start.shKein 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, siehedocs/INSTALL_WINDOWS.md. - Für die Microsoft-Anmeldung: eigene Entra-App-Registrierung (Public Client,
Redirect-URIhttp://127.0.0.1:<port>/api/v1/oauth/callback, Scope
https://outlook.office.com/IMAP.AccessAsUser.All), siehedocs/ENTRA_SETUP.md.
Wird ein Ausweichport verwendet, muss diese URI mit dem tatsächlichen Port
übereinstimmen — oderAPP_PORTauf 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-URIAPP_PORTsetzen. - imapsync ist nicht enthalten und muss separat installiert werden.
- Mehrere imapsync-Installationen im PATH:
IMAPSYNC_PATHin.envsetzen. - Shared Mailboxes werden nicht zugesagt (delegierter Zugriff nicht getestet).
Bekannte Fehler
Keine kritischen Fehler bekannt. Beobachtet:
502 oauth_provider_unavailableohne konfigurierte Client-ID bzw. ohne
Internetzugang zur Microsoft-Discovery (erwartetes Verhalten).- Ein fremdes
imapsync.batim Benutzerprofil kann als „inkompatibel (0.22)“
erkannt werden; Abhilfe:IMAPSYNC_PATHsetzen.
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.envbleiben gültig; Datenbankmigrationen laufen automatisch.
Nach dem Updatestart.batbzw.start.shverwenden — die Startskripte rufen
jetztpython -m app.launcherauf. Ein bereits laufender Server sollte vorher
beendet werden.Prüfsummen
SHA256SUMS.txtenthält die SHA-256-Werte für beide Archive und diese Release Notes.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bevorzugt wird weiterhin Port 8000 (bzw.