MAIL_PROCESS.md 2.7 KB

Mail-Prozess

Überblick

Der Versand aller Bestellmails ist zentral in includes/functions.php implementiert und wird synchron innerhalb der jeweiligen HTTP-Requests ausgeführt.

  • Kernfunktion für Versand: sendEmail(...)
  • Fachlicher Mail-Trigger: createOrder(...)
  • Laufzeit-Einstellungen: getSystemSettings() aus data/settings.json
  • Startwerte/Fallbacks: config.php

Hinweis:

  • Es gibt keine Queue, keinen Hintergrundjob und keine Retry-Logik. Versand erfolgt direkt per PHP-mail().

Relevante Einstellungen

Die folgenden Parameter steuern den Mailfluss:

Schlüssel Quelle Wirkung
order_recipient_email Admin-Einstellungen (data/settings.json) Empfänger für interne Bestellmail
attach_order_pdf_to_admin_email Admin-Einstellungen Hängt PDF an interne Bestellmail an
FROM_EMAIL, FROM_NAME config.php Absender/Anzeigename für alle ausgehenden Mails

Mail-Typen und Auslöser

1) Eingangsbestätigung an Besteller

  • Funktion: sendOrderCreatedCustomerEmail($order)
  • Trigger: direkt nach createOrder(...)
  • Empfänger: order.customer_email
  • Inhalt: Bestellung erfasst und intern weitergeleitet

2) Interne Bestellmail

  • Funktion: sendConfirmedOrderAdminNotification($order)
  • Trigger: direkt nach createOrder(...)
  • Empfänger: getOrderRecipientEmail() (normalisiert/validiert)
  • Inhalt: HTML-Bestellzusammenfassung
  • Optional: PDF-Anhang bestellung-<order-id>.pdf bei aktivem attach_order_pdf_to_admin_email
  • PDF-Erzeugung: renderOrderPdf($order) (intern prepareOrderForDocument() + generateOrderPdf()); enthält keine Bearbeitungs-/Lieferstatus-Felder aus der Admin-Oberfläche
  • Admin-Nachdruck: admin/order-pdf.php?id=<order-id> (Schaltfläche „Bestellung drucken“ auf admin/order.php)

Ablauf

  1. createOrder(...) speichert die Bestellung.
  2. Interne Bestellmail wird versendet.
  3. Besteller erhält Eingangsbestätigung.

Technische Versanddetails

  • Ohne Anhang: HTML- oder Textmail direkt über mail($to, $subject, $message, $headers).
  • Mit Anhang: multipart/mixed mit Base64-kodierten Attachments.
  • Standard-Header:
    • From: <FROM_NAME> <FROM_EMAIL>
    • Reply-To: FROM_EMAIL
    • X-Mailer: PHP/<version>

Fehlerverhalten und Nachvollziehbarkeit

  • Rückgaben von sendEmail(...) werden nur teilweise ausgewertet:
    • Bei interner Bestellmail wird bei Erfolg admin_notified_at gesetzt.
    • Schlägt die interne Mail fehl, bleibt admin_notified_at leer.
    • Fehlschläge von Bestellermails blockieren den Bestellprozess nicht.
  • Es gibt keine automatische Wiederholung fehlgeschlagener Mails.
  • Betriebsvoraussetzung bleibt eine funktionierende Server-Mailkonfiguration für PHP-mail().