feat: SMTP mail stack and separate server.env deploy
Add mail.php with STARTTLS sending, test scripts, server.env split from local .env, admin@ postbox docs, DKIM DNS support-ticket notes, and todo 11 for boka relay. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -29,7 +29,7 @@ Lokales Repo mit dem Webspace verbinden und eine deploybare Grundstruktur anlege
|
||||
├── httpdocs/ ← public/
|
||||
│ └── index.php
|
||||
└── private/ ← nicht öffentlich
|
||||
├── .env
|
||||
├── server.env ← Server-Secrets (deployed, nicht .env!)
|
||||
├── config/bootstrap.php
|
||||
└── data/ ← später last-checks.json
|
||||
```
|
||||
|
||||
+52
-20
@@ -1,45 +1,77 @@
|
||||
# 02 — E-Mail & SMTP
|
||||
|
||||
**Priorität:** high
|
||||
**Status:** erledigt (2026-06-11)
|
||||
**Abhängigkeiten:** 01
|
||||
**Blockiert:** 03 (Alarmierung)
|
||||
|
||||
## Ziel
|
||||
|
||||
Mail-Infrastruktur auf 0012.de für Monitoring-Alerts, Skript-Versand und spätere Fremddomains.
|
||||
Mail-Infrastruktur auf 0012.de für Monitoring-Alerts und Skript-Versand.
|
||||
|
||||
Relay von **boka** → ausgelagert nach [`11-boka-smtp-relay.md`](11-boka-smtp-relay.md).
|
||||
|
||||
## Postfach-Setup (Plesk)
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Postfach | `admin@0012.de` |
|
||||
| Aliase | `monitor@0012.de`, `alert@0012.de` |
|
||||
| SMTP-Login | `admin@0012.de` (Hauptpostfach, nicht Alias) |
|
||||
| Absender Monitoring | `SMTP_FROM=monitor@0012.de` |
|
||||
| Alarm-Empfänger | `ALERT_EMAIL` → persönliche Adresse |
|
||||
|
||||
## Checkliste
|
||||
|
||||
### Postfächer auf 0012.de
|
||||
|
||||
- [ ] Postfach `monitor@0012.de` (oder `alerts@0012.de`) anlegen
|
||||
- [ ] Passwort in `.env` → `SMTP_USER`, `SMTP_PASSWORD`
|
||||
- [ ] `ALERT_EMAIL` auf persönliche Adresse setzen
|
||||
- [ ] `SMTP_FROM=monitor@0012.de` setzen
|
||||
- [ ] Test: Webmail-Login auf `ha01s019.org-dns.com`
|
||||
- [x] `admin@0012.de` mit Aliasen `monitor@`, `alert@`
|
||||
- [x] Passwort in `.env` → `SMTP_USER`, `SMTP_PASSWORD`
|
||||
- [x] `ALERT_EMAIL` gesetzt
|
||||
- [x] `SMTP_FROM=monitor@0012.de`
|
||||
- [x] Webmail-Login auf `ha01s019.org-dns.com`
|
||||
|
||||
### SMTP für Skripte
|
||||
### SMTP für Skripte (0012.de)
|
||||
|
||||
- [ ] Port 587 + STARTTLS testen (von lokalem Rechner / boka)
|
||||
- [ ] SPF für `0012.de` in Plesk DNS prüfen/setzen
|
||||
- [ ] DKIM in Plesk aktivieren (Deliverability)
|
||||
- [ ] DMARC optional: `_dmarc.0012.de` mit `p=none` zum Start
|
||||
- [x] `config/mail.php` — `sendMail()`, `sendAlert()`
|
||||
- [x] `scripts/test-mail.php` — CLI-Test
|
||||
- [x] Port 587 + STARTTLS getestet (`php scripts/test-mail.php` → OK)
|
||||
- [x] SPF gesetzt (Hoster-DNS)
|
||||
- [x] DKIM in Plesk aktiviert
|
||||
- [ ] DKIM in **öffentlicher DNS** — fehlt; Hoster per Ticket (kein DNS-Zugang im Paket)
|
||||
- [x] DMARC vorhanden (Hoster-DNS)
|
||||
|
||||
### Relay von boka (später)
|
||||
### Technische Notizen
|
||||
|
||||
- [ ] Entscheiden: dediziertes Relay-Postfach `relay@0012.de` vs. App-spezifische Absender
|
||||
- [ ] In Plesk: ausgehende Mail-Limits / Relay-Regeln prüfen (Hoster-Doku)
|
||||
- [ ] boka-Apps: zentraler SMTP-Block in Docker/env (Host, Port, User, Pass)
|
||||
- **Envelope vs. From:** SMTP-Login als `admin@`, `MAIL FROM` ebenfalls `admin@`; sichtbarer Absender bleibt `monitor@` (Alias). Plesk verwirft sonst oft still nach `250 OK`.
|
||||
- **Test lokal:** `php scripts/test-mail.php` (liest `.env`)
|
||||
- **Test vom Webspace:** `mail-test.php?token=…` (liest `private/server.env`)
|
||||
- **Tuta/strenge Empfänger:** bis DKIM-DNS steht → `ALERT_EMAIL` Gmail o. ä.
|
||||
- **Kein DNS-Zugang:** DKIM-Records aus Plesk Mail-Einstellungen an wint-Support — siehe [`../HOSTING.md`](../HOSTING.md#dns-zugang-classic-10)
|
||||
|
||||
### Cron-Benachrichtigungen Plesk
|
||||
## `.env` (Beispiel)
|
||||
|
||||
- [ ] Geplante Aufgaben: „Nur Fehler“ für PHP-Fatal-Errors — ergänzt App-eigene Alerts, ersetzt sie nicht
|
||||
```env
|
||||
SMTP_USER=admin@0012.de
|
||||
SMTP_FROM=monitor@0012.de
|
||||
ALERT_EMAIL=you@example.com
|
||||
```
|
||||
|
||||
## Test
|
||||
|
||||
```bash
|
||||
php scripts/test-mail.php
|
||||
```
|
||||
|
||||
Nach Deploy: `server.env` auf Server, Test lokal mit `.env`.
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- Testmail von PHP (`mail()` oder PHPMailer) an `ALERT_EMAIL` kommt an
|
||||
- SPF/DKIM ohne Hard-Fail in Mail-Header-Test (mail-tester.com o. ä.)
|
||||
- [x] Testmail an `ALERT_EMAIL` kommt an
|
||||
- [ ] SPF/DKIM ohne Hard-Fail (mail-tester.com o. ä.) — optional
|
||||
|
||||
## Referenz
|
||||
|
||||
- [`../HOSTING.md`](../HOSTING.md) — SMTP-Host `ha01s019.org-dns.com`
|
||||
- [`../HOSTING.md`](../HOSTING.md)
|
||||
- [`../config/mail.php`](../config/mail.php)
|
||||
- boka-Relay: [`11-boka-smtp-relay.md`](11-boka-smtp-relay.md)
|
||||
|
||||
+15
-1
@@ -17,10 +17,24 @@ Monitoring automatisch alle 5–10 Minuten ausführen.
|
||||
- [ ] Ausführen: **Cron-Stil**
|
||||
- [ ] Expression: `*/10 * * * *` (Pull-Checks alle 10 Min)
|
||||
- [ ] Beschreibung: z. B. „0012 external monitoring pull“
|
||||
- [ ] Benachrichtigen: **Nur Fehler** (PHP-Crash → Plesk-Mail)
|
||||
- [ ] Benachrichtigen: **Nur Fehler** (siehe unten)
|
||||
- [ ] **Jetzt ausführen** — Exit-Code / Log prüfen
|
||||
- [ ] Optional zweite Aufgabe für leichtgewichtigen Heartbeat-Only-Check (`*/5`) — nur wenn von monitor.php getrennt
|
||||
|
||||
## Benachrichtigen: „Nur Fehler“
|
||||
|
||||
Erst beim Anlegen der geplanten Aufgabe in Plesk relevant (zusammen mit `monitor.php`).
|
||||
|
||||
| Option | Bedeutung |
|
||||
|--------|-----------|
|
||||
| **Nicht benachrichtigen** | Cron läuft still; Crash fällt nicht auf |
|
||||
| **Nur Fehler** | Plesk mailt nur bei Skript-Fehler (PHP-Fatal, Exit ≠ 0, stderr) |
|
||||
| **Jedes Mal** | Mail bei jeder Ausführung — bei `*/10` unbrauchbar |
|
||||
|
||||
**Empfehlung: „Nur Fehler“** — meldet, wenn `monitor.php` auf 0012.de selbst kaputt ist.
|
||||
|
||||
**Getrennt von Monitoring-Alerts:** Ausfall von `schwenk.online` kommt aus `sendAlert()` → `ALERT_EMAIL`. Plesk-Cron-Mail betrifft nur die Cron-Ausführung auf dem Webspace.
|
||||
|
||||
## Cron-Referenz
|
||||
|
||||
```
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# 11 — SMTP-Relay von boka
|
||||
|
||||
**Priorität:** medium
|
||||
**Status:** offen
|
||||
**Abhängigkeiten:** [02-email-smtp.md](02-email-smtp.md) (erledigt)
|
||||
**Blockiert:** boka-Apps, die über 0012.de mailen sollen
|
||||
|
||||
## Ziel
|
||||
|
||||
Prozesse auf **boka** (Docker-Stacks, Cron-Skripte) senden ausgehende Mail über den Plesk-SMTP von `0012.de`.
|
||||
|
||||
## Voraussetzungen (0012.de — erledigt in Todo 02)
|
||||
|
||||
- Postfach `admin@0012.de` mit Aliasen `monitor@`, `alert@`
|
||||
- SMTP TLS/587 auf `ha01s019.org-dns.com`
|
||||
- DKIM aktiv
|
||||
|
||||
## Checkliste
|
||||
|
||||
- [ ] Entscheiden: dediziertes Relay-Postfach vs. `admin@` + alias From-Adressen
|
||||
- [ ] In Plesk: ausgehende Mail-Limits / Relay-Regeln prüfen (Hoster-Doku)
|
||||
- [ ] SPF für `0012.de` verifizieren (boka-IPs nur wenn direkt sendend — bei Relay nicht nötig)
|
||||
- [ ] boka: zentraler SMTP-Block (Docker env / `.env` auf boka)
|
||||
- `SMTP_HOST=ha01s019.org-dns.com`
|
||||
- `SMTP_PORT=587`
|
||||
- `SMTP_USER=admin@0012.de`
|
||||
- `SMTP_PASSWORD=…` (gleiches Postfach oder App-Passwort)
|
||||
- [ ] Test von boka: `curl`/swaks oder kleines Script → Mail an persönliche Adresse
|
||||
- [ ] Pro Stack: From-Adresse festlegen (`monitor@0012.de`, `alert@0012.de`, …)
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- Mindestens ein Dienst auf boka sendet erfolgreich über 0012.de-SMTP
|
||||
- Keine Mails im Spam (DKIM pass)
|
||||
|
||||
## Referenz
|
||||
|
||||
- [`../HOSTING.md`](../HOSTING.md) — SMTP-Zugang
|
||||
- [`../config/mail.php`](../config/mail.php) — Referenz-Implementierung (PHP)
|
||||
+4
-1
@@ -5,7 +5,7 @@ Nummerierte Todos für den 0012.de-Webspace. Abhängigkeiten beachten.
|
||||
| # | Datei | Priorität | Kurzbeschreibung |
|
||||
|---|-------|-----------|------------------|
|
||||
| 01 | [01-bootstrap-env-deploy.md](01-bootstrap-env-deploy.md) | **high** | `.env`, Repo-Struktur, erstes FTP-Deployment |
|
||||
| 02 | [02-email-smtp.md](02-email-smtp.md) | **high** | Postfächer, SMTP für Alerts und Relay |
|
||||
| 02 | [02-email-smtp.md](02-email-smtp.md) | **high** | Postfächer, SMTP für Alerts (0012.de) |
|
||||
| 03 | [03-monitoring-pull-phase1.md](03-monitoring-pull-phase1.md) | **high** | `monitor.php`, HTTPS/SSL-Checks, Alarm |
|
||||
| 04 | [04-monitoring-push-boka.md](04-monitoring-push-boka.md) | **medium** | Push von boka → `ingest.php` |
|
||||
| 05 | [05-plesk-cron.md](05-plesk-cron.md) | **high** | Geplante Aufgaben in Plesk |
|
||||
@@ -14,11 +14,14 @@ Nummerierte Todos für den 0012.de-Webspace. Abhängigkeiten beachten.
|
||||
| 08 | [08-monitoring-phase2.md](08-monitoring-phase2.md) | **medium** | API-Health, Latenz, Backup-Heartbeat |
|
||||
| 09 | [09-monitoring-phase3.md](09-monitoring-phase3.md) | **low** | Rest-Domains, Dashboard, Header-Checks |
|
||||
| 10 | [10-optional-plesk-git-composer.md](10-optional-plesk-git-composer.md) | backlog | Plesk Git / Composer evaluieren |
|
||||
| 11 | [11-boka-smtp-relay.md](11-boka-smtp-relay.md) | **medium** | boka-Apps über 0012.de-SMTP |
|
||||
|
||||
## Backlog (ohne Priorität)
|
||||
|
||||
Todo **10** — Plesk Git-Deploy und Composer; dokumentiert in [`../PLESK.md`](../PLESK.md), kein Blocker für 02–09.
|
||||
|
||||
Todo **11** — boka SMTP-Relay; abhängig von erledigtem **02**, kein Blocker für **03**.
|
||||
|
||||
## Empfohlene Reihenfolge
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user