# SMTPGraphRelay 1.8.0 V1.8 ergänzt zwei Betriebsfunktionen: - Failed-Queue-Verwaltung im Setup-/Manager - kooperativer Graceful Shutdown für Update, Repair und manuelles Stoppen über den Manager Alle Funktionen aus V1.7 bleiben erhalten, insbesondere SMTP AUTH LOGIN/PLAIN, Queue-ID, Retry/Backpressure, Zertifikatsrotation, Health Check und Online-Update. ## Installation **Windows PowerShell 5.1 als Administrator**: ```powershell $u='https://me-gitea.maieredv.cloud/MAIEREDV/SMTPGraphRelay/raw/branch/main/Setup-SMTPGraphRelay.ps1';$f="$env:TEMP\Setup-SMTPGraphRelay.ps1";Invoke-WebRequest $u -UseBasicParsing -OutFile $f;& $f ``` ## Failed Queue verwalten Im Manager: ```text [10] Failed Queue verwalten ``` Untermenü: ```text [1] Failed Queue anzeigen [2] Details einer Mail anzeigen [3] Eine Mail erneut zustellen [4] Alle Mails erneut zustellen [5] Eine Mail endgültig löschen [6] Alle Failed-Mails endgültig löschen [0] Zurück ``` Die Übersicht zeigt u. a.: - Queue-ID - Zeitpunkt - RetryCount - Envelope-From - Empfänger - letzten HTTP-/Graph-Status - Größe In den Details steht zusätzlich die letzte Fehlermeldung und – falls vorhanden – der SMTP-AUTH-Benutzer. ### Requeue Beim erneuten Zustellen wird die `.eml` samt Metadaten von `failed` nach `queue\pending` verschoben. Dabei werden: ```text RetryCount = 0 NextAttemptUtc = jetzt RequeuedUtc = jetzt ``` gesetzt. Die alte Fehlerbeschreibung bleibt in den Metadaten erhalten, bis ein neuer Versandversuch sie aktualisiert. Der laufende Queue-Worker nimmt die Mail anschließend automatisch wieder auf. ## Graceful Shutdown Update und Repair verwenden nicht mehr zuerst `Stop-ScheduledTask`. Stattdessen erstellt der Manager: ```text C:\Program Files\SMTPGraphRelay\shutdown.request ``` Der Relay erkennt das Signal kurzfristig und führt diesen Ablauf aus: ```text Shutdown angefordert | v SMTP-Listener schließen | +--> keine neuen Verbindungen mehr | v laufende SMTP-Sessions auslaufen lassen | v Queue-/Graph-Worker beendet aktuellen Versand | +--> startet keine weitere Queue-Mail | v Runspaces schließen | v Graph-Verbindung trennen | v Relay beendet sich selbst ``` Standard-Timeout: ```json "Smtp": { "GracefulShutdownSeconds": 30 } ``` Zulässiger Bereich: ```text 5 bis 300 Sekunden ``` Wenn der Relay innerhalb dieses Zeitraums nicht selbst beendet ist, verwendet der Manager als Fallback einen harten `Stop-ScheduledTask`. Beim nächsten Start wird ein eventuell altes `shutdown.request` vorsorglich entfernt. ## Warum das für Updates wichtig ist Ein Update/Repair kann damit nicht mehr unnötig mitten in: - einer SMTP-DATA-Übertragung - einer aktiven SMTP-Session - oder einem laufenden Graph-sendMail-Aufruf den Prozess beenden. Wenn ein Client oder Graph länger als das konfigurierte Grace-Timeout hängt, wird nach Ablauf des Timeouts kontrolliert auf den bisherigen harten Stop zurückgefallen. ## Manager ```text [1] Neuinstallation aus Gitea [2] Installation aus Gitea reparieren [3] Nach Online-Updates suchen [4] Entra / Exchange RBAC prüfen [5] Zertifikat erneuern [6] Health Check ausführen [7] Deinstallieren [8] Status anzeigen [9] SMTP-AUTH verwalten [10] Failed Queue verwalten [0] Beenden ```