134 lines
3.4 KiB
Markdown
134 lines
3.4 KiB
Markdown
# 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.
|