4 Fehlerbehebung
julian edited this page 2026-11-04 21:41:54 +01:00

Fehlerbehebung

Zuerst immer die Installationsprüfung ausführen:

cd backend
..\runtime\python\python.exe -m app.cli check    # Windows
../runtime/python/bin/python3 -m app.cli check   # Linux

Exit-Code 0 bedeutet betriebsbereit, 1 ein blockierendes Problem. Die Ausgabe nennt Konfiguration, Datenverzeichnis, Datenbankrevision, Port, imapsync und Frontend-Build.

Port belegt oder gesperrt

Symptom: Start endet mit Exit 3 oder WinError 10013. Unter Windows kann ein Port per Richtlinie gesperrt sein, obwohl kein Prozess ihn nutzt.

Lösung: Laufende Instanz beenden (sonst Exit 4) oder einen festen Port setzen, damit die OAuth-Redirect-URI stabil bleibt:

APP_PORT=8010
APP_BASE_URL=http://127.0.0.1:8010

Danach die Redirect-URI in Entra auf denselben Port ändern. Der Ausweichbereich endet bei 8025; ist keiner frei, startet die Anwendung nicht. Belegende Prozesse zeigt netstat -ano | findstr :8000 (Windows) bzw. ss -ltnp | grep :8000 (Linux).

Laufzeit fehlt oder ist unvollständig

Symptom: [Fehler] Portable Laufzeit ist unvollständig (Perl, imapsync) oder runtime\python\python.exe fehlt.

runtime\python\python.exe scripts\provision_runtime.py --check
start.bat --repair
./start.sh --repair

Das richtet runtime/python, runtime/perl und runtime/imapsync neu ein; Daten und .env bleiben erhalten. Voraussetzung ist Internetzugang. Schlägt der Download fehl, Prüfsummen im Setup-Protokoll kontrollieren und runtime/.cache bei Bedarf leeren.

imapsync fehlt oder ist inkompatibel

Symptom: imapsync_unavailable oder imapsync_incompatible.

runtime\perl\perl\bin\perl.exe runtime\imapsync\imapsync --version
runtime\perl\perl\bin\perl.exe runtime\imapsync\imapsync --help | findstr /C:"--oauthaccesstoken1" /C:"--passfile2"

Erwartet wird 2.326 und beide Optionen. Fehlt das Skript, setup.bat ausführen; fehlt Perl, start.bat --repair. Ein imapsync im System-PATH wird bewusst ignoriert; ein abweichender Pfad muss explizit gesetzt werden:

IMAPSYNC_PATH=runtime/imapsync/imapsync

TLS-Fehler

Symptom: Exit-Code 12 (imapsync_tls) oder Zertifikatsfehler im Test.

openssl s_client -connect mail.example.org:993 -servername mail.example.org

Verify return code: 0 (ok) bedeutet in Ordnung; self-signed certificate ein nicht vertrauenswürdiges Zertifikat; no peer certificate available einen falschen Port oder fehlendes TLS. Der Hostname muss zum Zertifikat passen (CN/SAN), Zugriff über IP scheitert an der Namensprüfung. Port prüfen (993 implizit, 143 STARTTLS), eigene CA in den Systemtrust aufnehmen. Die TLS-Prüfung lässt sich nicht abschalten.

Anmeldefehler an der Quelle

Symptom: Exit-Code 161 oder reauth_required.

  1. Kontostatus unter „Microsoft 365“ prüfen: connected oder reauth_required.
  2. IMAP am Postfach aktiv? In Exchange Online:
Get-CASMailbox -Identity user@contoso.com | Select-Object ImapEnabled
Set-CASMailbox -Identity user@contoso.com -ImapEnabled $true
  1. Quelle und Ziel testen, ohne Mails zu verändern:
curl -X POST http://127.0.0.1:8000/api/v1/jobs/<job-id>/test \
  -H "X-CSRF-Token: <csrf-token>" -b cookies.txt

Bei reauth_required das Konto erneut autorisieren. Wurde die Zustimmung entzogen, Administratorzustimmung in Entra erneuern. Blockiert Conditional Access den Login, die Richtlinie prüfen — die Anmeldung erfolgt im Browser.

Anmeldefehler am Ziel

Symptom: Exit-Code 162 (imapsync_auth_target). Zieladresse exakt wie am Zielserver? Passwort am Job oder als Standard am Zielserver hinterlegt? Der Ziel-Test lässt sich in der Oberfläche unter „Zielserver“ auslösen oder per POST /api/v1/targets/{id}/test mit Benutzername und Passwort im Request-Body; beides prüft nur den Login. Passwort korrigieren (ohne Passwortfeld bleibt der gespeicherte Wert erhalten) und prüfen, ob der Zielserver den Login erlaubt. Bei Mailcow/Dovecot muss der Benutzer existieren und IMAP freigeschaltet sein.

Datenbank gesperrt

Symptom: 503 database_busy mit Retry-After. SQLite erlaubt nur einen Schreiber; zwei Instanzen oder ein laufendes Update erzeugen Sperren. Die Sperrdatei enthält die PID (type data\queue.lock bzw. cat data/queue.lock); mit tasklist /FI "PID eq <pid>" bzw. ps -p <pid> -o pid,cmd prüfen, ob der Prozess noch lebt. Läuft eine zweite Instanz, beenden. Pro Datenverzeichnis ist genau eine zulässig; eine veraltete Sperrdatei wird beim Start ersetzt. Bei wiederholtem 503 die Anwendung neu starten und die Anfrage erneut senden.

Weitere Fälle

Fall Ursache Abhilfe
Exit 4 zweite Instanz laufende Instanz nutzen oder beenden
Passwort vergessen kein Standardpasswort python -m app.cli set-password (verdeckte Eingabe)
nur JSON, leere Seite frontend/dist fehlt vollständiges Release oder npm ci && npm run build
folder_preview_failed Verbindung oder Rechte Quelle testen, Kontostatus prüfen
[log truncated…] 5-MB-Grenze RUN_LOG_MAX_BYTES erhöhen, neu starten

set-password wird aus backend\ mit ..\runtime\python\python.exe bzw. ../runtime/python/bin/python3 aufgerufen; ein Neustart ist nicht nötig.

Update schlägt fehl

Meldung Ursache Abhilfe
application_running Anwendung läuft beenden, erneut starten
migrations_running Lauf aktiv abwarten oder abbrechen
auth_required privates Repository ohne Token FORGEJO_TOKEN setzen
invalid_signature Release manipuliert Release prüfen; nichts wurde geändert
unsigned_release Signatur fehlt anderes Release verwenden
migration_failed DB-Migration fehlgeschlagen Installation wurde zurückgerollt

Die Sicherung liegt unter data/updates/backup-<Zeitstempel>/. Für eine Fehlermeldung sammeln: Ausgabe von python -m app.cli check, Version aus VERSION und Plattform, betroffener Lauf mit Exit-Code und Fehlercode, letzte Zeilen des redigierten Protokolls sowie die Angabe, ob der Fehler mit IMAP-Quelle oder Microsoft 365 auftritt. Keine Tokens, Passwörter oder vollständigen .env-Inhalte weitergeben.