-
v0.9.0-beta.1 (Beta) Pre-release
released this
2026-11-04 21:44:55 +01:00 | 1 commits to main since this releaseRelease Notes — v0.9.0-beta.1
Status: Vorabversion (Beta / Prerelease). Nicht produktionsreif, nicht vollständig getestet.
Datum: 2026-11-04Neu in 0.9.0-beta.1
1. Updater (
update.bat/update.sh)Aktualisieren ohne Neuentpacken und ohne erneuten Download der Laufzeit.
- Prüft die Forgejo-Releases, vergleicht Versionen und bleibt standardmäßig im
bisherigen Kanal (auto): eine Beta-Installation wird nicht auf einen
Stable-Release zurückgesetzt.--channel stable|betaerzwingt einen Kanal. - Signierte Prüfsummen:
SHA256SUMSträgt eine Ed25519-Signatur; der
öffentliche Schlüssel ist im Programm hinterlegt (backend/app/release_key.py).
Ohne gültige Signatur wird nichts installiert — die Integrität hängt nicht am
Download-Endpunkt. - Runtime bleibt erhalten: Ein Manifest (
MANIFEST-<plattform>.json) nennt
Python-, Perl-, imapsync- und Paketstände. Nur wenn dort etwas abweicht, wird
die Laufzeit nachgezogen; unveränderte Komponenten bleiben unangetastet. - Daten sind geschützt:
.env,data/undruntime/werden nie
überschrieben. Vor dem Austausch werden Konfiguration und Datenbank (SQLite-
Backup-API) gesichert; Programmdateien werden journalliert ausgetauscht und bei
einem Fehler zurückgerollt — inklusive Datenbank-Restore, damit Code und Schema
wieder zusammenpassen. - Abbruch bei laufender Anwendung oder laufenden Migrationen. Download in ein
temporäres Verzeichnis, Prüfung von Signatur und Prüfsummen vor dem
Entpacken. - Fehlermeldungen nennen Ursache und nächsten Schritt (offline, HTTP-Fehler,
fehlende Signatur, fehlende Berechtigung).
2. Ein Startskript, automatische Einrichtung
start.bat/start.sherledigen beim ersten Start alles: fehlende Laufzeit
einrichten (einmaliger Download), Konfiguration erzeugen, Datenbank anlegen,
Server starten, Browser erst nach dem tatsächlichen Start öffnen. Folgestarts
nutzen die vorhandene Laufzeit ohne Download.start.bat --repairprüft und
ersetzt beschädigte Laufzeitkomponenten.3. Ersteinrichtung im Browser
Statt eines Passworts im Setup gibt es jetzt eine Einrichtungsseite: Benutzername
(Standardadmin), eigenes Passwort (mindestens 12 Zeichen), Bestätigung. Kein
Standardpasswort, nur der Argon2id-Hash landet in.env. Solange kein
Administrator existiert, leitet die Anwendung ausschließlich auf diese Seite.
Parallele Einrichtungsversuche werden über eine Sperrdatei abgewiesen.4. IMAP als Quelle (IMAP → IMAP)
Neben Microsoft 365 können klassische Postfächer migriert werden
(Mailcow → Mailcow, IONOS/Strato → Mailcow, eigener Server → eigener Server).- Quellserver unter „Quellserver“ anlegen (Host, Port, SSL/TLS/STARTTLS), Passwort
verschlüsselt; Verbindungstest ohne Änderungen. - Dieselbe Migrationsengine wie bisher (imapsync, Queue, Scheduler, Logs,
Retry) — keine zweite Engine. - Microsoft-365-Funktionen bleiben unverändert.
5. Postfachvorschau und Ordnerauswahl (nur lesend)
- „Postfach analysieren“ liest ausschließlich
LIST/STATUS: Ordnerhierarchie,
Nachrichtenzahlen je Ordner, Fehler einzelner Ordner werden gesammelt. - Es entstehen dabei keine Jobs, keine Nachrichten werden verändert.
- Ordnerbaum mit Auf-/Zuklappen, „alle auswählen“, „alle abwählen“, Aktualisieren.
- Auswahl wird pro Job gespeichert: „alle Ordner (auch künftige)“ oder „nur
ausgewählte“ (--folderje Ordner). Neue Ordner im Quellpostfach werden bei
„nur ausgewählte“ nicht automatisch übernommen. - Nachrichtenzahlen sind als Momentaufnahme gekennzeichnet.
6. Assistent „Postfach prüfen und migrieren“
Ein geführter Ablauf: Quelle wählen → verbinden → analysieren → Ordner auswählen →
Ziel und Adressen → „Nur anlegen“ oder „Migration starten“. Vorschau und Start
sind klar getrennt; erst der letzte Schritt überträgt Daten.7. Getrennte Plattformpakete
M365-to-Exchange-Sync-Windows.zip: nursetup.bat,start.bat,update.bat,
scripts/setup.ps1— keine Shell-Skripte.M365-to-Exchange-Sync-Linux.tar.gz: nursetup.sh,start.sh,update.sh—
keine Batch-/PowerShell-Dateien.
8. Dokumentation
- Forgejo-Wiki mit 16 Seiten (Installation, Ersteinrichtung, Microsoft 365,
IMAP-Quellen, Vorschau, Migration, Überwachung, Scheduler, Updates, Sicherheit,
Fehlerbehebung, FAQ, Entwicklung, Einschränkungen). - README als kurze Projektstartseite mit Verweisen ins Wiki.
AGENTS.md: verbindliche Dokumentationsregeln für künftige Änderungen.
Unterstützte Betriebssysteme
Plattform Status Windows 10 (1803+)/11, Server 2019+ getestet (portable Laufzeit, Start, Vorschau, Migration, Update) Debian 12 / Ubuntu 22.04+ vorbereitet, nicht ausgeführt getestet Installation
Windows: ZIP entpacken → start.bat (erster Start richtet alles ein) Linux: tar xzf … && ./start.shBeim ersten Start werden Laufzeit und Abhängigkeiten einmalig geladen
(ca. 360 MB). Danach genügtstart.batbzw../start.sh.Voraussetzungen
- Windows 10 1803+ (nutzt
tar.exe) bzw. Linux x86_64 mittarundcurl/wget. - Internetzugang beim ersten Start (Laufzeit-Download) und für Updates.
- Für Microsoft 365: 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). - Kein Docker, keine Administratorrechte, keine Registry-/PATH-Änderungen.
Getestete Funktionen
- Updater: Versionsvergleich und Kanäle, signierte Prüfsummen (Ed25519),
Manipulations- und Checksummen-Fehler, Abbruch bei laufender Anwendung und bei
laufenden Migrationen, Rollback nach fehlgeschlagener Datenbankmigration,
Runtime-Wiederverwendung, Installation in einem Pfad mit Leerzeichen. - Start: automatische Einrichtung beim ersten Start, Folgestarts ohne
Download, Reparatur, Portauswahl mit Ausweichport. - Ersteinrichtung: Setup-Seite, Passwortregeln, einmalige Einrichtung,
parallele Anfragen, Login danach. - IMAP-Quellen: CRUD, Verbindungstest, Nur-Lesen-Vorschau (auch gegen einen
echten IMAP-Server), Ordnerauswahl persistent, Job-Anlage, Argumenterzeugung
(--passfile1,--folder, TLS-Modi). - Migration: echte lokale IMAP→IMAP-Migration mit dem portablen imapsync.
- Automatisierte Tests: Backend-Suite, Frontend-Suite (inkl. Setup- und
Vorschau-Flow), TypeScript-Prüfung, Produktionsbuild.
Nicht getestete Funktionen
- Microsoft-365-Live-Anmeldung und -Migration: kein Testkonto/keine Entra-App.
Mit Mocks getestet, nicht live verifiziert. - Linux-Betrieb:
setup.sh, relocatable-perl,start.sh,update.shsind
vorbereitet, aber nie ausgeführt. - Echtes Strg+C in einer Windows-Konsole: Signalzustellung in der
Testumgebung nicht reproduzierbar; geordnetes Herunterfahren wurde in-process
mit echtem uvicorn geprüft. - Browser-Klicktest: Werkzeug blockiert Loopback; ersetzt durch
Komponententests und HTTP-Integrationstests.
Bekannte Einschränkungen
- Ein Update ersetzt Programmdateien; eine laufende Anwendung muss vorher beendet
werden (der Updater weist darauf hin). - Ordnerauswahl wird über imapsync-
--folderumgesetzt: umbenannte Ordner im
Quellpostfach erscheinen als neuer Ordner. - Die Vorschau zeigt eine Momentaufnahme; die tatsächlich übertragene Menge kann
durch Duplikaterkennung und Änderungen am Quellpostfach abweichen. - Genau eine Backend-Instanz pro Datenverzeichnis.
- Der Ausweichport ist nicht dauerhaft; für eine feste OAuth-Redirect-URI
APP_PORTsetzen.
Sicherheitshinweise
- Keine Microsoft-Passwörter in der Anwendung; Anmeldung im Browser, Tokens und
Quell-/Zielpasswörter Fernet-verschlüsselt indata/database/app.db. .enventhältAPP_ENCRYPTION_KEY,SESSION_SECRETund den
Argon2id-Passwort-Hash — Datei schützen (Windows-ACL, Linuxchmod 600).- Releases werden mit Ed25519 signiert; der Updater prüft die Signatur vor jeder
Installation. - Optionale Authentifizierung am Release-Server ausschließlich über die
UmgebungsvariableFORGEJO_TOKEN(nicht in Skripten, Logs oder URLs). - Bindung ausschließlich an
127.0.0.1.
Lizenz
Eigener Code: MIT (
LICENSE). Nicht gebündelt: imapsync (wird beim ersten Start
von der offiziellen Quelle geladen), Python (PSF), Strawberry Perl
(Artistic/GPL) bzw. relocatable-perl, CPAN-Module, Frontend-Bibliotheken
(MIT/ISC). Details:LICENSE.md.Upgrade von 0.8.0-beta.3
Empfohlen:
update.batbzw../update.sh --apply— Daten, Konfiguration und
Laufzeit bleiben erhalten. Alternativ das neue Archiv in einen neuen Ordner
entpacken;data/und.envkönnen übernommen werden.Prüfsummen
SHA256SUMS(signiert alsSHA256SUMS.sig) enthält die SHA-256-Werte für beide
Archive, beide Manifeste und diese Release Notes.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Prüft die Forgejo-Releases, vergleicht Versionen und bleibt standardmäßig im
-
v0.8.0-beta.3 (Beta) Pre-release
released this
2026-11-04 21:03:08 +01:00 | 3 commits to main since this releaseRelease Notes — v0.8.0-beta.3
Status: Vorabversion (Beta / Prerelease). Nicht produktionsreif, nicht vollständig getestet.
Datum: 2026-11-04Neu in 0.8.0-beta.3: vollständig portable Architektur
Die Anwendung bringt ihre komplette Laufzeit im eigenen Ordner unter und startet
nichts aus dem System.M365-to-Exchange-Sync/ ├── setup.bat | start.bat | setup.sh | start.sh ├── backend/ FastAPI ├── frontend/dist/ gebautes React-Frontend ├── runtime/ │ ├── python/ CPython 3.12.16 (python-build-standalone) │ ├── perl/ Windows: Strawberry Perl 5.42.3 · Linux: relocatable-perl 5.44 │ └── imapsync/ imapsync 2.326 ├── data/ │ ├── database/ SQLite (app.db) │ ├── logs/ │ └── tmp/ └── .env- Kein systemweites Python mehr nötig.
setup.batlädt CPython 3.12
(portable, SHA-256 geprüft) nachruntime/pythonund installiert die
gepinnten Pakete dort hinein.start.batstartet ausschließlich diesen
Interpreter. - Kein systemweites Perl, kein PATH-Eintrag. Perl kommt als portable
Verteilung nachruntime/perl, imapsync als Skript nachruntime/imapsync.
Der Runner startetruntime\perl\perl\bin\perl.exe runtime\imapsync\imapsync
mit kontrollierter Umgebung (PATH/PERL5LIBnur mit lokalen Pfaden). - Fremde Installationen werden ignoriert. Ein
imapsync.bat0.22 oder ein
systemweites Perl im PATH beeinflusst die Anwendung nicht mehr (früher wurde
genau das als „inkompatibel (0.22)" erkannt). - Alle Daten im Programmordner:
data/database(SQLite),data/logs,
data/tmp. Ältere Installationen mitdata/app.dbwerden beim ersten Start
automatisch übernommen. - Relative Pfade in
.env(DATA_DIR=data,
IMAPSYNC_PATH=runtime/imapsync/imapsync,PERL_PATH=…) — der komplette
Ordner lässt sich verschieben, auch in Pfade mit Leerzeichen. - Verständliche Fehlermeldungen, wenn die Laufzeit fehlt:
[Fehler] Portable Laufzeit ist unvollständig (Perl, imapsync). Bitte setup.bat ausführen. - Keine Systemänderung: keine Registry-Einträge, keine Dienste, keine
geplanten Aufgaben, keineAppData/ProgramData-Daten. Deinstallation =
Ordner löschen (entfernt auch Tokens, Datenbank und Logs).
Enthalten aus den Vorgängerversionen: Portauswahl mit Fallback
(WinError 10013), Browser erst nach Serverstart, Erkennung einer zweiten
Instanz, Migration über OAuth2/XOAUTH2 mit imapsync, persistente Warteschlange
mit Scheduler/Retry/Recovery, React-Oberfläche, MIT-Lizenz.Unterstützte Betriebssysteme
Plattform Status Windows 10 (1803+)/11, Server 2019+ getestet (portable Laufzeit, Start, Verschieben, Migration) Debian 12 / Ubuntu 22.04+ vorbereitet, nicht getestet (keine Linux-Umgebung) Installation
Windows:
ZIP entpacken → setup.bat (Administratorpasswort, min. 12 Zeichen) → start.batLinux:
tar xzf M365-to-Exchange-Sync-Linux.tar.gz cd M365-to-Exchange-Sync && ./setup.sh && ./start.shDownload der Laufzeit beim Setup: ca. 360 MB (Windows) bzw. 370 MB (Linux),
einmalig. Bei erneutem Setup wird der Cache inruntime/.cachegenutzt, solange
die Prüfsumme passt.Voraussetzungen
- Windows 10 1803+ (nutzt
tar.exe) bzw. Linux x86_64 mittarundcurl/wget. - Internetzugang beim Setup (offizielle Quellen, SHA-256-geprüft).
- Für Migrationen: 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). - Kein Docker, keine Administratorrechte, keine PATH-/Registry-Änderungen.
Getestete Funktionen
- Portable Python-Laufzeit (
runtime/python/python.exe, CPython 3.12.16),
inklusive Installation der gepinnten Pakete in diese Laufzeit. - Portable Perl-Laufzeit (Strawberry 5.42.3) mit 27 Modulen (u. a.
Net::SSLeay,IO::Socket::SSL,Mail::IMAPClient). - Lokales imapsync 2.326 (Start über
runtime/perl,--versiongeprüft). - Fremdes
imapsync.bat0.22 im PATH wird ignoriert — die Anwendung meldet
2.326 ausruntime/imapsync. - Start aus dem entpackten Archiv in einem leeren Verzeichnis, ohne
APP_PORT, mit Ausweichport; Health, Oberfläche, Login, CRUD. - Verschieben des Programmordners (inkl. Pfad mit Leerzeichen), Neustart
danach, Daten und Laufzeit intakt. - Wiederholtes Setup ändert
.envnicht und lädt die Laufzeit nicht neu. - Echte lokale IMAP-Migration mit dem lokalen imapsync.
- Automatisierte Tests: Backend-Suite inkl. neuer Runtime-/Porttests,
Frontend-Suite, TypeScript-Prüfung, Produktionsbuild.
Nicht getestete Funktionen
- Microsoft-365-Live-Anmeldung und -Migration: kein Testkonto, keine
Entra-App. OAuth ist implementiert und mit Mocks getestet, nicht live. - Linux-Betrieb:
setup.sh/start.shund die Linux-Laufzeit
(relocatable-perl) sind vorbereitet, aber nie ausgeführt. - Echtes Strg+C in einer Windows-Konsole: Signalzustellung in der
Testumgebung nicht reproduzierbar; geordnetes Herunterfahren wurde in-process
mit echtem uvicorn geprüft. - Browser-Klicktest: Werkzeug blockiert Loopback; ersetzt durch HTTP-Tests.
Bekannte Einschränkungen
- Setup benötigt Internet (kein Offline-Bundle).
- Strawberry Perl veröffentlicht keine Prüfsummen-Datei; die SHA-256 wurde
einmalig aus dem offiziellen Release ermittelt (im Skript dokumentiert). - Genau eine Backend-Instanz pro Datenverzeichnis.
- Der Ausweichport ist nicht dauerhaft; für eine fest registrierte
OAuth-Redirect-URIAPP_PORTsetzen. runtime/ist groß (Windows: ca. 1,3 GB nach dem Setup) — bewusst, dafür
keine Systeminstallationen.
Sicherheitshinweise
- Keine Microsoft-Passwörter in der Anwendung; Anmeldung im Browser,
Tokens verschlüsselt (Fernet) indata/database/app.db. .enventhältAPP_ENCRYPTION_KEY,SESSION_SECRETund den
Argon2id-Passwort-Hash — Datei schützen (Windows: ACL, Linux:chmod 600).- Temporäre Token-/Passwortdateien in
data/tmp/<run-id>/mit0600bzw.
restriktiver DACL, Löschung nach jedem Lauf; Logs werden redigiert. - Bindung ausschließlich an
127.0.0.1. - Der Download der Laufzeit erfolgt ausschließlich von den dokumentierten
Quellen und wird vor dem Entpacken per SHA-256 geprüft. - Beim Verschieben des Ordners bleiben die Dateirechte erhalten; bei
Kopien auf Datenträger ohne Rechteübernahme (FAT/exFAT) können Tokens und
Schlüssel für andere Benutzer lesbar werden.
Lizenz
Eigener Code: MIT (
LICENSE). Nicht gebündelt: imapsync (NO LIMIT PUBLIC
LICENSE, wird beim Setup von der offiziellen Quelle geladen), Python
(PSF), Strawberry Perl (Artistic/GPL) bzw. relocatable-perl, CPAN-Module,
Frontend-Bibliotheken (MIT/ISC). Details:LICENSE.md.Upgrade von 0.8.0-beta.2
- Server beenden, Ordner sichern.
- Neues Archiv in einen neuen Ordner entpacken (oder alten Ordner ersetzen).
setup.bat— übernimmt.envunddata/falls vorhanden; die alte
data/app.dbwird beim Start automatisch nachdata/database/app.db
verschoben.start.bat.
Die Migrationen laufen automatisch.
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
- Kein systemweites Python mehr nötig.
-
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.
-
v0.8.0-beta.1 (Beta) Pre-release
released this
2026-11-04 19:54:54 +01:00 | 8 commits to main since this releaseRelease Notes — v0.8.0-beta.1
Status: Vorabversion (Beta / Prerelease). Nicht produktionsreif, nicht vollständig getestet.
Datum: 2026-11-04Neue 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:8000Linux (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. 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, siehedocs/INSTALL_WINDOWS.md. - Für die Microsoft-Anmeldung: eigene Entra-App-Registrierung (Public Client,
Redirect-URIhttp://127.0.0.1:8000/api/v1/oauth/callback, Scope
https://outlook.office.com/IMAP.AccessAsUser.All), siehedocs/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 antwortetPOST /identities/{id}/authorizemit
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_PORTsetzen);
python -m app.cli checkwarnt dann. - imapsync ist nicht enthalten und muss separat installiert werden.
- Werden mehrere imapsync-Versionen im PATH gefunden, kann die falsche erkannt werden —
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, wird in der Oberfläche erklärt).- 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). Verlust des Schlüssels macht
gespeicherte Geheimnisse unlesbar —.envsichern. - Temporäre Token-/Passwortdateien:
0600indata/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 ohneSecuregesetzt. - 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.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
- Migration von Microsoft-365-/Exchange-Online-Postfächern über IMAP (OAuth2/XOAUTH2)