67 lines
2.1 KiB
Markdown
67 lines
2.1 KiB
Markdown
# SMTPGraphRelay V1.2 – Queue & Retry
|
||
|
||
Diese Version ersetzt nur `SMTPGraphRelay.ps1`. Die bestehende `config.json`, Entra-App,
|
||
das Zertifikat und Exchange Application RBAC bleiben unverändert.
|
||
|
||
## Neue Queue-Struktur
|
||
|
||
```text
|
||
queue\
|
||
├── incoming\
|
||
├── pending\
|
||
└── processing\
|
||
|
||
failed\
|
||
```
|
||
|
||
- `incoming`: Mail wird gerade atomar geschrieben.
|
||
- `pending`: vollständig angenommene und sendbare Mail.
|
||
- `processing`: aktuell durch den Worker bearbeitet.
|
||
- `failed`: permanent fehlgeschlagene oder nach MaxRetries aufgegebene Mail.
|
||
|
||
Beim Start werden alte V1-Mails direkt aus `queue\` nach `pending\` migriert.
|
||
Mails, die nach einem Absturz noch in `processing\` liegen, werden nach `pending\`
|
||
zurückgestellt.
|
||
|
||
## Retry
|
||
|
||
- HTTP 429: `Retry-After` wird verwendet; fehlt es, exponentielles Backoff.
|
||
- HTTP 408 und 5xx: Retry nach `RetryMinutes` aus `config.json`.
|
||
- Netzwerk-/Transportfehler ohne HTTP-Code: Retry.
|
||
- typische permanente 4xx wie 400/401/403/404/413/415/422: direkt nach `failed`.
|
||
- nach `MaxRetries`: nach `failed`.
|
||
|
||
## Installation über bestehende Version
|
||
|
||
1. Scheduled Task stoppen:
|
||
|
||
```powershell
|
||
Stop-ScheduledTask -TaskName "SMTPGraphRelay"
|
||
```
|
||
|
||
2. Bestehendes `SMTPGraphRelay.ps1` sichern.
|
||
3. `SMTPGraphRelay-V1.2.ps1` als `SMTPGraphRelay.ps1` in den Programmordner kopieren.
|
||
4. Task starten:
|
||
|
||
```powershell
|
||
Start-ScheduledTask -TaskName "SMTPGraphRelay"
|
||
```
|
||
|
||
5. Log prüfen:
|
||
|
||
```powershell
|
||
Get-Content "C:\Program Files\SMTPGraphRelay\logs\SMTPGraphRelay.log" -Tail 100
|
||
```
|
||
|
||
## Hinweis zu 202 Accepted
|
||
|
||
Microsoft Graph `sendMail` liefert bei erfolgreicher Annahme `202 Accepted`. Das bedeutet,
|
||
dass Graph die Nachricht angenommen hat, aber nicht, dass die endgültige Zustellung bereits
|
||
abgeschlossen ist.
|
||
|
||
Eine absolut garantierte Exactly-Once-Zustellung kann ein SMTP→Graph-Gateway nicht
|
||
sicherstellen: Falls Graph die Mail bereits angenommen hat und der lokale Prozess exakt
|
||
vor dem Löschen der Queue-Datei abstürzt, kann ein erneuter Versuch theoretisch ein Duplikat
|
||
erzeugen. V1.2 reduziert dieses Risiko durch die Processing-Queue, kann es aber nicht
|
||
vollständig eliminieren.
|