kotori web solutions Maren Arnhold


Magento: Verschiedene E-Mail-Templates für
Bestellbestätigungen intern sowie an den Kunden

Für Betreiber eines Magento-Shops, die diesen ausschließlich zur Erfassung von Bestellungen verwenden, die eigentliche Bestellabwicklung aber extern erledigen, ist es ein sinnvolles Vorgehen, Bestätigungsmails nach erfolgreichem Bestellvorgang parallel an den Kunden und an die eigene Adresse zu versenden. Dies ist auch im Backend unter System - Configuration - Sales - Sales Emails leicht einzurichten, entweder als separate E-Mail oder als Blindkopie (BCC).

Allerdings gibt es Fälle, in denen es vom Shopbetreiber gar nicht erwünscht ist, die Bestellbestätigungen im selben Layout wie der Kunde zu erhalten. In manchen Unternehmen werden Bestellmails zur weiteren Vorgangsbearbeitung in Papierform ausgedruckt und weitergeleitet, so dass aus Gründen der Übersichtlichkeit und Wirtschaftlichkeit (Papier-/Tonerverbrauch) darauf Wert gelegt wird, dass die für den internen Gebrauch bestimmten Mails so kurz, kompakt und frei von unwichtigen Informationen wie möglich sind. Beispielsweise sind Bereiche einer Bestätigungsmail, in der Adress- und Kontaktangaben des Unternehmens vermerkt sind, für die Bestellbearbeitung ebenso irrelevant wie Ansprache- oder Erklärungstexte.

Diese Funktion - also, die Bestellbestätigungen an den Kunden in Layout A und die internen Bestätigungen in Layout B zu versenden - stellt Magento ab Werk nicht zur Verfügung. Wir basteln uns also dazu eine kleine Extension unter der Bezeichnung Kotori_Myextension (für weitere Erläuterungen, wie eine Extension aufgebaut ist, siehe den entsprechenden Wissensartikel hier auf kotori.de), um die Klasse Mage_Sales_Model_Order, in der der Mailversand normalerweise stattfindet, zu überschreiben, und zwar mit der Klasse Kotori_Myextension_Model_Order.

Die config.xml der Extension unter /app/code/local/Kotori/Myextension/etc/ sieht dann folgendermaßen aus:
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
<?xml version="1.0"?>
<config>
	<modules>
		<Kotori_Myextension>
			<version>0.1.0</version>
		</Kotori_Myextension>
	</modules>
	<global>
		<blocks>
		</blocks>
		<models>
			<sales>
				<rewrite>
					<order>Kotori_Myextension_Model_Order</order>
				</rewrite>
			</sales>
		</models>		
		<events>
		</events>
	</global>
	<frontend>
		<routers>
		</routers>
	</frontend>
	<default>
	</default>	
</config>
 


Bevor wir uns mit der Klassendefinition selbst beschäftigen, müssen wir allerdings noch eine Kleinigkeit vorbereiten: nämlich das Template, das für den internen Gebrauch bestimmt ist, einrichten. Dies erledigen wir nach der Vorgehensweise im Infotext Eigene E-Mail-Templates für Kundentransaktionen. Anschließend (Abb. 1) sehen wir in der Transactional Emails-Liste das neue Template unter dem Titel Neues Kotori-Template. Die Nummer des Templates - hier 42 - sollte notiert oder gemerkt werden, wir werden diese Nummer gleich bei der Klassendefinition von Kotori_Myextension_Model_Order brauchen!

Abbildung 1: Die Nummer vor dem erstellten Template für den internen Gebrauch sollte notiert bzw. gemerkt werden. Wir benötigen sie in der Klassendefinition von Kotori_Myextension_Model_Order.


Nachfolgend die Klassendefinition von Kotori_Myextension_Model_Order, abgelegt in /app/code/local/Kotori/Myextension/Model. Besonders wichtig für unsere gewünschte Funktion ist der Zeilenbereich von 71 bis 92; hier wird mit $internmailer ein zweites Mailer-Objekt referenziert, dem über die entsprechenden Methoden anschließend die Zieladresse (hier info@kotori.de) und als Absender Name und E-Mail-Adresse des Kunden übergeben werden. In Zeile 85 wird das Template gesetzt, das für den Mailer relevant sein soll, und zwar über die ID-Nummer, die wir uns oben notiert haben, in diesem Beispiel eben 42. Das Absenden übernimmt die send()-Methode in Zeile 95.

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101:
<?php
 
class Kotori_Myextension_Model_Order extends Mage_Sales_Model_Order
{
 
    public function sendNewOrderEmail()
    {
        $storeId = $this->getStore()->getId();
 
        if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
            return $this;
        }
        $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
        $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
 
        $appEmulation = Mage::getSingleton('core/app_emulation');
        $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
 
        try {
            $paymentBlock = Mage::helper('payment')->getInfoBlock($this->getPayment())
                ->setIsSecureMode(true);
            $paymentBlock->getMethod()->setStore($storeId);
            $paymentBlockHtml = $paymentBlock->toHtml();
        } catch (Exception $exception) {
            $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
            throw $exception;
        }
 
        $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
 
        if ($this->getCustomerIsGuest()) {
            $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
            $customerName = $this->getBillingAddress()->getName();
        } else {
            $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
            $customerName = $this->getCustomerName();
        }
 
        $mailer = Mage::getModel('core/email_template_mailer');
        $emailInfo = Mage::getModel('core/email_info');
        $emailInfo->addTo($this->getCustomerEmail(), $customerName);
        if ($copyTo && $copyMethod == 'bcc') {
            // Add bcc to customer email
            foreach ($copyTo as $email) {
                $emailInfo->addBcc($email);
            }
        }
        $mailer->addEmailInfo($emailInfo);
 
        if ($copyTo && $copyMethod == 'copy') {
            foreach ($copyTo as $email) {
                $emailInfo = Mage::getModel('core/email_info');
                $emailInfo->addTo($email);
                $mailer->addEmailInfo($emailInfo);
            }
        }
 
        // Mail an Kunden vorbereiten und senden
 
        $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
        $mailer->setStoreId($storeId);
        $mailer->setTemplateId($templateId);
        $mailer->setTemplateParams(array(
                'order'        => $this,
                'billing'      => $this->getBillingAddress(),
                'payment_html' => $paymentBlockHtml
            )
        );
        $mailer->send();
 
	// Interne Mail vorbereiten und senden
 
	$internmailer = Mage::getModel('core/email_template_mailer');
        $internemailInfo = Mage::getModel('core/email_info');
        $internemailInfo->addTo('info@kotori.de','Kotori Test');
        $internmailer->addEmailInfo($internemailInfo);
 
	// Interne Bestellmails mit Kunden-E-Mail-Adresse und -Name als Absender!
 
	$internsender = Array('name'  => $this->getCustomerName(), 'email' => $this->getCustomerEmail());
	$internmailer->setSender($internsender);
        $internmailer->setStoreId($storeId);
 
	// ID 42 ist im Backend fuer diese Kurzmails festgelegt
        $internmailer->setTemplateId(42);
        $internmailer->setTemplateParams(array(
                'order'        => $this,
                'billing'      => $this->getBillingAddress(),
                'payment_html' => $paymentBlockHtml
            )
        );
        $internmailer->send();
 
        $this->setEmailSent(true);
        $this->_getResource()->saveAttribute($this, 'email_sent');
 
        return $this;
    }
 
}
 


Eine Testbestellung ergibt für die interne Mailadresse eine Rückmeldung wie in Abbildung 2 sowie für die Kundenmailadresse die Optik in Abbildung 3; beides entspricht genau dem erwünschten Verhalten.

Abbildung 3: ... und was den Kunden erreicht.
Abbildung 2: Was intern ankommt...



Autorin: Maren Arnhold

comments powered by Disqus
ANZEIGE
kotori web solutions Maren Arnhold bietet einen Komplettservice rund um Webdesign, Webprogrammierung und Webhosting. Suchen Sie nach einer Lösung für Ihre private Homepage? Möchten Sie ein eigenes Blog betreiben und suchen dafür ein geeignetes CMS und entsprechenden Webspace? Oder interessieren Sie sich für E-Commerce und benötigen einen Webshop? Dann sollten wir uns kennenlernen - eine kostenlose Erstberatung ist selbstverständlich!
© 2013 kotori web solutions Maren Arnhold. Alle Rechte vorbehalten/All rights reserved..