Files
clemensandClaude Sonnet 5 7b517bcbf6 Doku: Mailversand im Produktivbetrieb ueber Webspace-Mailserver
Klaerung auf Nutzerfrage: saas_send_mail() nutzt produktiv PHP mail()
statt eines externen SMTP-Relays, laeuft also automatisch ueber den
Mailserver des Webspace-Anbieters, der fuer die eigene Domain i.d.R.
bereits autorisiert ist (SPF/rDNS). Dokumentiert die dafuer noetigen
Env-Variablen, insbesondere APP_MAIL_FROM, das produktiv nicht auf dem
Platzhalter noreply@kaffeeliste.local stehen bleiben darf.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 17:49:49 +02:00

2.4 KiB
Raw Permalink Blame History

Mailversand im Produktivbetrieb

Stand: 2026-07-15

Der Mailversand läuft über app/saas-mail.php und nutzt bewusst keinen fest codierten SMTP-Client. Alle Versandwege der App (Passwort-Reset, E-Mail-Verifikation, Einladungen, Info-Mails, Jahresabschluss) laufen über saas_send_mail().

Wie der Versand funktioniert

  • Im Dev-Modus (APP_ENV=dev) schreibt saas_send_mail() jede Mail nur als Datei nach var/mail (APP_MAIL_TRANSPORT=log), es wird nichts wirklich verschickt.
  • Außerhalb des Dev-Modus verschickt saas_send_mail() standardmäßig über PHPs eingebaute mail()-Funktion (APP_MAIL_TRANSPORT=mail). mail() übergibt die Nachricht an den lokalen Mail-Transport-Agent des Servers, auf dem PHP läuft (typischerweise sendmail), nicht an einen externen SMTP-Relay.

Warum das für Webspace-Hosting passt

Läuft die App auf dem eigenen Webspace, geht die Mail damit automatisch über den Mailserver des Webspace-Anbieters raus. Bei den meisten Webspace-Anbietern ist genau dieser Mailserver bereits für die gehosteten Domains autorisiert (passender SPF-Eintrag, korrektes rDNS), sodass Mails im Namen der eigenen Domain ohne zusätzliche SMTP-Konfiguration zuverlässig zugestellt werden. Ein externer SMTP-Provider ist für den Start nicht nötig.

Produktiv zu setzende Umgebungsvariablen

export APP_ENV="prod"
# APP_MAIL_TRANSPORT kann entfallen, "mail" ist der Standard sobald
# APP_ENV nicht "dev" ist. Explizit setzen schadet aber nicht:
export APP_MAIL_TRANSPORT="mail"

# Wichtig: echte Absenderadresse auf der eigenen Domain, sonst ist SPF-
# Alignment beim Empfänger nicht gegeben, selbst wenn der Server senden
# darf. Der Code-Default "noreply@kaffeeliste.local" ist nur ein
# Platzhalter und darf produktiv nicht stehen bleiben.
export APP_MAIL_FROM="noreply@kaffeeliste.de"
export APP_MAIL_FROM_NAME="Kaffeeliste"

# Für korrekte Links in Mails (Passwort-Reset, Einladungen, Dashboard-Link):
export APP_BASE_URL="https://app.kaffeeliste.de"

Später möglich, aktuell nicht nötig

Eine dedizierte SMTP-/Provider-Anbindung (z. B. über einen Transaktionsmail-Dienst mit Bounce- und Zustellprotokoll) war in docs/m3-saas-basis-vorbereitung.md als möglicher späterer Ausbau vorgesehen. Das bleibt sinnvoll, sobald Zustellrate, Bounce-Handling oder Versandvolumen eine eigene Überwachung brauchen für den Start reicht der Versand über den ohnehin bereits autorisierten Webspace-Mailserver.