Das Ziel: Der Text einer EMail (bei Statusänderungen) innerhalb von osCommerce soll angepasst werden.
Das Problem: osCommerce versendet EMails standardgemäß als reinen Text. Nun gibt es diverse Erweiterungen, die es uns ermöglichen, mit releativ niedrigem Aufwand auch HTML – Mails zu erstellen.

Meine genutzte osCommerce Contribution ermöglicht aber nur die Anpassung der Bestellbestätigung. Will man den Kunden per EMail über den Status der Bestellung informieren, werden wieder Text-Mails verwendet. Hier soll aber ebenfalls eine HTML – EMail mit hübschem Briefkopf versendet werden.

Wo wird die Mail erstellt?

Zuerst einmal müssen wir den Code finden, der uns die Statusmail erzeugt. Die relevante Datei ist [katalog-root]/admin/orders.php. Den Code finden wir in dieser Datei hinter:

if ( ($check_status['orders_status'] != $status) || tep_not_null($comments)) {
          tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . tep_db_input($status) . "', last_modified = now() where orders_id = '" . (int)$oID . "'");

und vor:

tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . " (orders_id, orders_status_id, date_added, customer_notified, comments) values ('" . (int)$oID . "', '" . tep_db_input($status) . "', now(), '" . tep_db_input($customer_notified) . "', '" . tep_db_input($comments)  . "')");

Mit der Suchfunktion einer guten IDE sollten wir den für uns interessanten Bereich so schnell finden.

Wo sind die Kommentare?

Nicht vorhanden :-| Nun geht es also daran, die Codezeilen genauer unter die Lupe zu nehmen, zu kommentieren und evtl. zu separieren. Wenn wir hier zusätzlich HTML – Elemente einbringen wollen, tut das der Ãœbersicht sichtlich gut. Ein Ergebnis des formatierten Original-Codes könnte sein:

// BOF EMAIL - UPDATE ORDER
          $customer_notified = '0';
          if (isset($HTTP_POST_VARS['notify']) && ($HTTP_POST_VARS['notify'] == 'on')) {
            $notify_comments = '';
            if (isset($HTTP_POST_VARS['notify_comments']) && ($HTTP_POST_VARS['notify_comments'] == 'on')) {
              $notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n\n";
            }
			// construct mail content
			// --- storename
            $email = STORE_NAME . "\n"; 
            // --- seperator
            $email .=EMAIL_SEPARATOR . "\n"; 
            // --- order-number
            $email .= EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n";
            // --- account history url
            $email .= EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n";
            // --- order date
            $email .= EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n";
            // --- comments (see code above )
            $email .= $notify_comments;
            // --- new status
            $email .= sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
			// send mail
            tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
            $customer_notified = '1';
          }
          // EOF EMAIL - UPDATE ORDER

Jetzt haben wir eine gute Ausgangslage, um Änderungen und Ergänzungen am Code vorzunehmen. Um die Standard-Funktionen von osCommerce später wiederherzustellen, empfiehlt es sich an dieser Stelle ein Backup der Codezeilen anzulegen.

Wer bis zu diesem Punkt gelesen (und verstanden) hat, sollte ohne Probleme HTML – Elemente nach seinen Bedürfnissen einfügen können. Daher sei hier auf ein Code-Beispiel verzichtet, da es zu sehr auf die Anforderungen meiner osCommerce Installation eingeht.

Diesen Artikel habe ich bereits in ähnlicher Form im Februar 2007 in meinem Meta-Blog veröffentlicht. Durch die thematische Neuausrichtung zieht er nun auf ShopSeo.de um.

2 Antworten zu “osCommerce EMail bei Statusänderung einer Bestellung anpassen”

  1. Teiresias sagt:

    Vielen Dank für diese Erläuterung … hat mir :)

    Beste Grüße
    Tei

  2. ribta sagt:

    Hallo, ich habe einen OsCommerce Shop Installiert und würde gerne das DHL RETOURE Online mit einbinden hat jemand Erfahrung damit?
    http://dhl.de/retoureonline es soll für die Online Retourenabwicklung genutzt werden.

Eine Antwort schreiben