Files
homepage/backend/README.md
T
Michael Schmeinck fb995cefdb mail ready
2026-09-27 18:30:34 +02:00

2.4 KiB

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.