Felix Riesterer: Bestellformmailer mit Produktauswahl

Beitrag lesen

Lieber Pfid,

So wie ich das jetzt soweit verstandenhabe sendet dieser Webshop die Daten an eine XML-Datei, die diese dann auswertet und ausgiebt (oder so ähnlich).

nö. Das PHP-Script speichert diverse Daten in einer XML-Datei (noch weigere ich mich wegen solcher Kleinigkeiten einen DB-Server wie MySQL zu nutzen), nachdem es sie ausgewertet hat.

Mein Problem ist: Wie bekomme ich diese Funktion in "mail()",
dass das auch in der Bestell- und der Bestätigungsmail drinn steht.

Du generierst den Mailtext in einer Variablen. Für jede Mail generierst Du einen eigenen Mailtext (eventuell mit Platzhaltern).

Beispiel (ungetestet!):

function bestellung_mailen($bestelldaten) {  
    $meldungen = array(); // für Fehlermeldungen oder andere Rückgabewerte  
  
    // so könnten die Daten der Bestellung aussehen  
    $bestelldaten = array(  
        'Kundennummer' => '0123456',  
        'Artikel' => array(), // Hier stehen die Artikel drin  
        'Versandart' => 'Nachnahme'  
        // etc.  
    );  
  
    // Bestelldaten in einen String umwandeln  
    $bestelltext = "";  
    foreach ($bestelldaten as $key => $value) {  
        $bestelltext .= "$key: ".print_r($value,true)."\r\n";  
    }  
  
    // Mailtexte erzeugen (könnte auch in irgendwelchen Einstellungen stehen)  
    $mails = array(  
        'an_kunde' => array(  
            'text' => "Geehrter Kunde, geehrte Kundin,\r\n\r\n"  
                ."vielen Dank für Ihre Bestellung."  
                ." Wir werden sie innerhalb der nächsten zwei Werktage bearbeiten."  
                ." Hier Ihre abgesandten Daten:\r\n\r\n{bestellung}",  
            'adresse' => 'kunde@example.org'  
        ),  
        'an_betreiber' => array(  
            'text' => "Folgende Bestellung ist im Webshop eingegangen:"  
                ."\r\n\r\n{bestellung}",  
            'adresse' => 'ich@example.org'  
        )  
    );  
  
    // Mailtexte ergänzen  
    foreach ($mails as $typ => $mail) {  
        $mails[$type]['text'] = str_replace('{bestellung}', $bestelltext, $mail['text']);  
    }  
  
    // Mails versenden  
    foreach ($mails as $index => $mail) {  
        // Mailheader zusammenbauen  
        $headers = array(  
            'To'          => $mail['adresse'],  
            'Subject'     => 'Bestellung in meinem Webshop',  
            'From'        => 'webshop@example.org',  
            'Reply-To'    => 'ich@example.org',  
            '...'         => '' // alle gewünschten Mailheader eintragen!  
        );  
  
        // Header für die mail()-Funktion in String wandeln  
        $mail['header'] = '';  
        foreach ($headers as $key => $value) {  
            $mail['headers'] .= "$key: $value\r\n";  
        }  
  
        // Weg mit der Mail!  
        if (mail(  
            // Hier schön die Parameter aus den obigen Arrays einbauen  
            $headers['To'],  
            $headers['Subject'],  
            $mail['text'], // <-- Hier steht jetzt der individuelle Mailtext!  
            $mail['headers'] // manches ist jetzt zwar "doppelt gemoppelt", aber egal  
        )) {  
            $meldungen[] = 'OK: Mail an "'.$mail['adresse'].'" erfolgreich versandt!';  
        } else {  
            $meldungen[] = 'Fehler: Mail an "'.$mail['adresse'].'" konnte nicht versandt werden!';  
        }  
  
    return $meldungen;  
}

Im Grunde musst Du nur von der Idee Abschied nehmen, dass Du es Dir einfach machen könntest. Dann siehst Du gleich ein, warum Du Deine HTML-Dokumente eben _nicht_ mit PHP-Code verunreinigst, und Deine PHP-Scripte nicht mit (zuviel) HTML-Code. Außerdem ist es sinnvoll, manche Dinge in eine Funktion auszulagern, da man dann in der Trennung zwischen Ausgabe und Programmlogik flexibler ist.

Aber alles das hättest Du in meinem Webshop-Script finden und sehen können...

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)