Files
SMTPGraphRelay/README.md
T

134 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.