Installation unter Windows
Die Installation besteht aus Entpacken, einem Setup-Lauf und dem Start. Python, Perl und imapsync müssen nicht vorinstalliert werden.
Voraussetzungen
- Windows 10 (1803+), Windows 11 oder Windows Server 2019+.
tar.exe(ab Windows 10 enthalten), wird nur beim Setup verwendet.- Internetzugang für den einmaligen Download (ca. 360 MB).
- Etwa 1,3 GB freier Speicher nach dem Setup.
- Keine Administratorrechte, keine Registry- oder PATH-Änderungen, kein Docker.
Download und Entpacken
M365-to-Exchange-Sync-Windows.zipbeziehen.- In ein Verzeichnis außerhalb von
C:\Program Filesentpacken, z. B.C:\Tools\M365-to-Exchange-Sync. Pfade mit Leerzeichen sind zulässig. - Prüfen, dass
setup.bat,start.batundbackend/vorhanden sind. Einruntime/-Ordner ist im Archiv bewusst nicht enthalten.
mkdir C:\Tools
cd /d C:\Tools
tar -xf M365-to-Exchange-Sync-Windows.zip
cd M365-to-Exchange-Sync
Der Ordner darf nicht in einem synchronisierten Cloud-Verzeichnis liegen; die SQLite-Datenbank und die Sperrdatei vertragen keine konkurrierenden Zugriffe.
Setup
setup.bat
Das Setup ist idempotent: Ein zweiter Lauf ergänzt nur Fehlendes und ändert eine vorhandene .env nicht.
| Komponente | Zielpfad | Quelle (SHA-256 geprüft) |
|---|---|---|
| Python 3.12.16 | runtime\python\ |
python-build-standalone |
| Python-Pakete | runtime\python\Lib\site-packages |
PyPI, gepinnt |
| Perl 5.42.3 | runtime\perl\ |
Strawberry Perl, portable ZIP |
| imapsync 2.326 | runtime\imapsync\imapsync |
offizielle Quelle des Autors |
Downloads landen im Cache runtime\.cache und werden bei Wiederholung genutzt, solange die Prüfsumme passt.
setup.bat -NonInteractive REM ohne Rückfragen
setup.bat -NoAdmin REM ohne Administratorrechte (Standard)
setup.bat -ForceRuntime REM Laufzeit vollständig neu einrichten
-ForceRuntime ersetzt runtime\python, runtime\perl und runtime\imapsync; data\ und .env bleiben unverändert.
Erster Start
start.bat
Beim ersten Start werden fehlende Laufzeitteile nachinstalliert, eine .env erzeugt und die Datenbank migriert. Der Server bindet an 127.0.0.1; der Browser öffnet erst, wenn der Server bereit ist. Die Ausgabe nennt die tatsächliche Adresse, z. B. http://127.0.0.1:8000.
Ist Port 8000 belegt oder per Richtlinie gesperrt (WinError 10013), prüft der Start die folgenden Ports bis 8025 und meldet den Ausweichport samt passender OAuth-Redirect-URI.
start.bat --repair REM Laufzeit prüfen und reparieren
set M365SYNC_NO_BROWSER=1 && start.bat REM ohne Browserstart
Details zur ersten Anmeldung: Erster Start.
Verzeichnisse
M365-to-Exchange-Sync\
├── setup.bat, start.bat, update.bat
├── backend\ Anwendung und Datenbankmigrationen
├── frontend\dist\ gebaute Oberfläche
├── runtime\ portable Laufzeit (Python, Perl, imapsync)
├── data\
│ ├── database\app.db SQLite-Datenbank
│ ├── logs\ Laufprotokolle
│ ├── tmp\ temporäre Secret-Dateien (werden gelöscht)
│ └── updates\ Update-Arbeitsverzeichnis und Sicherungen
└── .env Konfiguration und Schlüssel
Alle Pfade in der .env sind relativ (DATA_DIR=data, IMAPSYNC_PATH=runtime/imapsync/imapsync), damit der Ordner verschiebbar bleibt. Eine ältere data\app.db wird beim ersten Start automatisch nach data\database\app.db übernommen.
Verschieben und Deinstallation
Verschieben: Anwendung beenden, den kompletten Ordner verschieben (auch in Pfade mit Leerzeichen) und start.bat im neuen Pfad ausführen. Es sind keine Pfade außerhalb des Ordners zu ändern. Bei Kopien auf Datenträger ohne Rechteübernahme (FAT/exFAT) können Tokens und Schlüssel für andere Benutzer lesbar werden; solche Ziele vermeiden.
Deinstallation: Es gibt keine Registry-Einträge, keine Dienste, keine geplanten Aufgaben und keine Dateien in AppData oder ProgramData. Anwendung beenden, bei Bedarf data\ sichern, dann den Programmordner löschen. Achtung: Damit werden Datenbank, verschlüsselte Tokens und Zielpasswörter, Protokolle sowie die .env mit den Schlüsseln entfernt; ohne vorherige Sicherung ist keine Wiederherstellung möglich.
Diagnose
Aus dem Verzeichnis backend\:
..\runtime\python\python.exe -m app.cli check
Nur die Laufzeit prüfen (aus dem Projektordner):
runtime\python\python.exe scripts\provision_runtime.py --check
check prüft Konfiguration, Schreibrechte, Datenbankrevision, Bindbarkeit des Ports, imapsync und Frontend-Build; Exit-Code 0 bedeutet betriebsbereit, 1 blockierende Probleme. provision_runtime.py --check prüft nur die Laufzeit (Python, Perl, IO::Socket::SSL, imapsync).
Bekannte Einschränkungen
- Das Setup benötigt Internet; ein Offline-Bundle gibt es nicht.
- Strawberry Perl veröffentlicht keine eigene Prüfsummendatei; die SHA-256 ist im Setup-Skript hinterlegt.
- Der Ausweichport ist nicht dauerhaft. Für eine fest registrierte OAuth-Redirect-URI
APP_PORTin der.envsetzen. - Ein echtes
Strg+Cin einer Windows-Konsole ist nicht reproduzierbar getestet.