12 lines
2.4 KiB
Markdown
12 lines
2.4 KiB
Markdown
# Kontaktformular mit Microsoft 365
|
|
|
|
Den Ordner `backend/` vorzugsweise außerhalb des Nginx-Webroots installieren. Wenn das ganze Projekt als Webroot dient, muss die beigefügte Nginx-Regel `/backend/` sperren. Die statischen Seiten bleiben bei Nginx. Nur `/api/contact` wird an den lokalen Python-WSGI-Dienst weitergeleitet.
|
|
|
|
1. In Microsoft Entra eine eigene App registrieren, Microsoft Graph **Anwendungsberechtigung** `Mail.Send` erteilen und Administratorzustimmung geben. Die Sendeberechtigung in Exchange Online auf das vorgesehene Postfach einschränken (Application RBAC). Der Absender muss ein vorhandenes Exchange-Online-Postfach sein. Für das Formular kann `info@dilibworld.com` zugleich Absender und Empfänger sein; die Besuchermail steht in `Reply-To`.
|
|
2. `contact.env.example` als nicht öffentlich erreichbare Environment-Datei außerhalb des Webroots ablegen. `CONTACT_FORM_SECRET` mit `openssl rand -hex 32` erzeugen. IDs, Secret und Absender eintragen. Die Secret-Datei mit restriktiven Rechten schützen und **nie** in Git oder den Webroot legen.
|
|
3. Python-Umgebung anlegen: `python3 -m venv /opt/dilibworld-contact-venv` und `/opt/dilibworld-contact-venv/bin/pip install -r backend/requirements.txt`. Dienst mit einer Gunicorn-Worker-Instanz starten: `gunicorn --workers 1 --bind 127.0.0.1:8091 app:application` (Arbeitsverzeichnis `backend/`, Environment-Datei durch systemd `EnvironmentFile=` einlesen). Nur localhost binden. Bei mehreren Workern muss der einmalige Formularschlüssel in einem gemeinsamen Speicher verwaltet werden.
|
|
4. Die beiden Snippets aus `nginx-contact.conf.example` an den angegebenen Stellen in die bestehende HTTPS-Konfiguration aufnehmen. HTTP nach HTTPS umleiten. `nginx -t` ausführen und Nginx neu laden. Wenn `www.dilibworld.com` erreichbar ist, auf `dilibworld.com` umleiten, damit die Origin-Prüfung passt.
|
|
5. Nach Einrichtung eine echte Anfrage senden und Empfang sowie `Reply-To` prüfen. Ein gefülltes Feld `website` wird still verworfen. Bei Mailfehlern erscheint eine Fehlermeldung im Formular. Die Datenschutzvorlagen enthalten noch auszufüllende Angaben.
|
|
|
|
Der Server prüft Origin, Formularalter, Honeypot, Pflichtfelder, Inhaltstyp und Länge. Nginx begrenzt Anfragen pro IP. Es werden keine Tokens oder Mailinhalte protokolliert. Microsoft Graph bestätigt eine angenommene Nachricht mit HTTP 202; die tatsächliche Zustellung ist damit noch nicht garantiert.
|