Der Versand aller Bestellmails ist zentral in includes/functions.php implementiert und wird synchron innerhalb der jeweiligen HTTP-Requests ausgeführt.
sendEmail(...)createOrder(...) und confirmOrderByToken(...)getSystemSettings() aus data/settings.jsonconfig.phpHinweis:
mail().Die folgenden Parameter steuern den Mailfluss:
| Schlüssel | Quelle | Wirkung |
|---|---|---|
order_recipient_email |
Admin-Einstellungen (data/settings.json) |
Empfänger für interne Bestellmail |
order_additional_recipients_by_organization |
Admin-Einstellungen (data/settings.json) |
Zusätzliche interne Empfänger je organization_id (als Cc, aktuell nur per JSON-Datei gepflegt) |
order_confirmation_required |
Admin-Einstellungen | Erzwingt Bestätigungsmail vor interner Weiterleitung |
order_confirmation_expiry_days |
Admin-Einstellungen | Gültigkeit des Bestätigungslinks |
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 |
SITE_URL |
config.php |
Basis für Bestätigungslink in Mails |
sendOrderConfirmationRequestEmail($order)createOrder(...), wenn order_confirmation_required = trueorder.customer_emailorder-confirm.php?token=...sendOrderCreatedCustomerEmail($order)createOrder(...), wenn order_confirmation_required = falseorder.customer_emailsendOrderConfirmedCustomerEmail($order)confirmOrderByToken(...)order.customer_emailsendConfirmedOrderAdminNotification($order)createOrder(...), wenn order_confirmation_required = falseconfirmOrderByToken(...), wenn vorher pendingTo: getOrderRecipientEmail() (normalisiert/validiert)Cc: order_additional_recipients_by_organization[order.organization_id] (normalisiert, dedupliziert, ohne To-Duplikat)bestellung-<order-id>.pdf bei aktivem attach_order_pdf_to_admin_emailBeispiel:
{
"settings": {
"order_additional_recipients_by_organization": {
"jugend": ["jugend@example.org"],
"spielmannszug": ["spielmannszug@example.org"]
}
}
}
createOrder(...) speichert Bestellung mit confirmation_status = pending.order-confirm.php auf und startet confirmOrderByToken(...).confirmation_status wird auf confirmed gesetzt,createOrder(...) speichert Bestellung mit confirmation_status = not_required und confirmed_at.pending) wechseln nach Frist auf expired.refreshOrderState(...) berechnet und über expirePendingOrders() beim Aufruf von admin/index.php, admin/orders.php und order-confirm.php fortgeschrieben.expired gibt es keine zusätzliche Mail.mail($to, $subject, $message, $headers).multipart/mixed mit Base64-kodierten Attachments.From: <FROM_NAME> <FROM_EMAIL>Reply-To: FROM_EMAILX-Mailer: PHP/<version>Cc: <adresse1>, <adresse2>, ... für organisationsbasierte ZusatzempfängerbuildAbsoluteUrl(...) erzeugt:
SITE_URL wird direkt verwendet,SITE_URL wird aus Request-Kontext (HTTP_HOST, HTTPS) eine absolute URL gebaut.sendEmail(...) werden nur teilweise ausgewertet:
admin_notified_at gesetzt.admin_notified_at leer.mail().