# 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-.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=` (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: ` - `Reply-To: FROM_EMAIL` - `X-Mailer: PHP/` ## 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()`.