# SMTPGraphRelay V1.3 – parallele SMTP-Verbindungen V1.3 baut auf V1.2 auf. Entra-App, Zertifikat, Exchange Application RBAC und `config.json` können unverändert weiterverwendet werden. ## Neu - bis zu 20 parallele SMTP-Verbindungen standardmäßig - konfigurierbares Parallel-Limit über `Smtp.MaxConcurrentClients` - SMTP-Clients laufen in einem .NET Runspace Pool - Queue-/Graph-Versand läuft in einem eigenen Runspace - ein langsamer Graph-Aufruf blockiert die SMTP-Annahme nicht mehr - ein langsamer/hängender SMTP-Client blockiert andere Clients nicht mehr - bei erreichtem Parallel-Limit erhält ein neuer Client: `421 4.3.2 SMTPGraphRelay busy, try again later` - Logging ist mit einem benannten Mutex gegen parallele Schreibzugriffe geschützt - Queue-/Retry-Logik aus V1.2 bleibt erhalten ## Optional: Parallel-Limit konfigurieren Bestehende `config.json` muss nicht geändert werden. Ohne Eintrag gilt `20`. Optional: ```json "Smtp": { "ListenAddress": "0.0.0.0", "Port": 2525, "Hostname": "SMTPRELAY01", "AllowedNetworks": [ "127.0.0.1/32", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16" ], "MaxMessageSizeMB": 25, "ClientTimeoutSeconds": 120, "MaxConcurrentClients": 20 } ``` Erlaubter Bereich: 1 bis 200. Ungültige Werte fallen auf 20 zurück. ## Update ```powershell Stop-ScheduledTask -TaskName "SMTPGraphRelay" Copy-Item ` "C:\Program Files\SMTPGraphRelay\SMTPGraphRelay.ps1" ` "C:\Program Files\SMTPGraphRelay\SMTPGraphRelay-V1.2-backup.ps1" ``` Dann `SMTPGraphRelay-V1.3.ps1` als ```text C:\Program Files\SMTPGraphRelay\SMTPGraphRelay.ps1 ``` ablegen und starten: ```powershell Start-ScheduledTask -TaskName "SMTPGraphRelay" ``` Log: ```powershell Get-Content ` "C:\Program Files\SMTPGraphRelay\logs\SMTPGraphRelay.log" ` -Tail 100 ``` Beim Start sollten u. a. erscheinen: ```text SMTPGraphRelay V1.3 gestartet ... Maximale parallele SMTP-Verbindungen: 20 Queue-/Graph-Worker läuft separat vom SMTP-Listener. ``` ## Test für Parallelität In mehreren PowerShell-Fenstern gleichzeitig: ```powershell Send-MailMessage ` -SmtpServer 127.0.0.1 ` -Port 2525 ` -From "info@maieredv.de" ` -To "manuel.maier@maieredv.de" ` -Subject "Parallel-Test" ` -Body "SMTPGraphRelay V1.3" ``` Für einen härteren Test können mehrere Jobs gleichzeitig gestartet werden: ```powershell 1..10 | ForEach-Object { Start-Job -ArgumentList $_ -ScriptBlock { param($n) Send-MailMessage ` -SmtpServer 127.0.0.1 ` -Port 2525 ` -From "info@maieredv.de" ` -To "manuel.maier@maieredv.de" ` -Subject "Parallel-Test $n" ` -Body "Nachricht $n" } } Get-Job | Wait-Job | Receive-Job Get-Job | Remove-Job ``` ## Architektur ```text +--> SMTP Worker 1 --+ SMTP Listener -----------+--> SMTP Worker 2 --+--> pending\ +--> SMTP Worker N --+ Runspace Pool | | unabhängig v Queue / Graph Worker | v Microsoft Graph ``` Der SMTP-Listener nimmt dadurch weiter neue Verbindungen an, während andere Clients noch `DATA` übertragen oder Microsoft Graph gerade langsam antwortet.