3.4 KiB
3.4 KiB
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:
"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
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
C:\Program Files\SMTPGraphRelay\SMTPGraphRelay.ps1
ablegen und starten:
Start-ScheduledTask -TaskName "SMTPGraphRelay"
Log:
Get-Content `
"C:\Program Files\SMTPGraphRelay\logs\SMTPGraphRelay.log" `
-Tail 100
Beim Start sollten u. a. erscheinen:
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:
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:
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
+--> 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.