Im Zusammenhang mit einem Kundenprojekt haben wir das Magento-System so umgebaut, dass es sich optimal als Gewinnspiel-Seite eignet. Bei diesem muss im Falle eines Sachpreises die Versandadresse sowie ein Foto-Upload eingegeben und hochgeladen werden.
Nun hatten wir das Problem, dass Magento jedes Mal, wenn ein Nutzer keinen Upload oder ein falsches Format hochladen wollte (zwar eine Fehler-Meldung auf der Seite kam aber auch) eine Mail aus dem System verschickt wurde, dass die Zahlung fehlgeschlagen ist.
Generell ist hierfür die Einstellung unter System > Konfiguration > Verkäufe / Zur Kasse und dort bei “E-Mails bei fehlgeschlagener Zahlung” zuständig. Hier könnte man auf die Idee kommen, dass keine Mail verschickt wird, wenn man das Feld mit der Adresse einfach leer lässt – denkste! Wenn man sich die Bezeichnung der Felder anschaut, sieht man, dass dort etwas von Kopie steht. Die “Zahlung fehlgeschlagen”-Mail wird nämlich IMMER an die im System hinterlegte Kontakt-Mail-Adresse geschickt und kann dann noch ZUSÄTZLICH an die hier zu hinterlegende Mail verschickt werden (daher auch die letzte Einstellung “Bcc / Separate Mail”).
Wenn man nun also KEINE -und ich meine KEINE- “Zahlung fehlgeschlagen”-Mail mehr haben möchte, kann man dies auf verschiedene Arten erreichen.
Man kann sich einen Rewrite für app/code/core/Mage/Checkout/Helper/Data.php schreiben und dort im Speziellen für
public function sendPaymentFailedEmail($checkout, $message, $checkoutType = 'onepage')
Dies wäre wohl besser als einfach nur den Part
public function sendPaymentFailedEmail($checkout, $message, $checkoutType = 'onepage') { $translate = Mage::getSingleton('core/translate'); /* @var $translate Mage_Core_Model_Translate */ $translate->setTranslateInline(false); $mailTemplate = Mage::getModel('core/email_template'); /* @var $mailTemplate Mage_Core_Model_Email_Template */ $template = Mage::getStoreConfig('checkout/payment_failed/template', $checkout->getStoreId()); $copyTo = $this->_getEmails('checkout/payment_failed/copy_to', $checkout->getStoreId()); $copyMethod = Mage::getStoreConfig('checkout/payment_failed/copy_method', $checkout->getStoreId()); if ($copyTo && $copyMethod == 'bcc') { $mailTemplate->addBcc($copyTo); } $_reciever = Mage::getStoreConfig('checkout/payment_failed/reciever', $checkout->getStoreId()); $sendTo = array( array( 'email' => Mage::getStoreConfig('trans_email/ident_'.$_reciever.'/email', $checkout->getStoreId()), 'name' => Mage::getStoreConfig('trans_email/ident_'.$_reciever.'/name', $checkout->getStoreId()) ) ); if ($copyTo && $copyMethod == 'copy') { foreach ($copyTo as $email) { $sendTo[] = array( 'email' => $email, 'name' => null ); } } $shippingMethod = ''; if ($shippingInfo = $checkout->getShippingAddress()->getShippingMethod()) { $data = explode('_', $shippingInfo); $shippingMethod = $data[0]; } $paymentMethod = ''; if ($paymentInfo = $checkout->getPayment()) { $paymentMethod = $paymentInfo->getMethod(); } $items = ''; foreach ($checkout->getAllVisibleItems() as $_item) { /* @var $_item Mage_Sales_Model_Quote_Item */ $items .= $_item->getProduct()->getName() . ' x '. $_item->getQty() . ' ' . $checkout->getStoreCurrencyCode() . ' ' . $_item->getProduct()->getFinalPrice($_item->getQty()) . "\n"; } $total = $checkout->getStoreCurrencyCode() . ' ' . $checkout->getGrandTotal(); foreach ($sendTo as $recipient) { $mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$checkout->getStoreId())) ->sendTransactional( $template, Mage::getStoreConfig('checkout/payment_failed/identity', $checkout->getStoreId()), $recipient['email'], $recipient['name'], array( 'reason' => $message, 'checkoutType' => $checkoutType, 'dateAndTime' => Mage::app()->getLocale()->date(), 'customer' => Mage::helper('customer')->getFullCustomerName($checkout), 'customerEmail' => $checkout->getCustomerEmail(), 'billingAddress' => $checkout->getBillingAddress(), 'shippingAddress' => $checkout->getShippingAddress(), 'shippingMethod' => Mage::getStoreConfig('carriers/' . $shippingMethod . '/title'), 'paymentMethod' => Mage::getStoreConfig('payment/' . $paymentMethod . '/title'), 'items' => nl2br($items), 'total' => $total, ) ); } $translate->setTranslateInline(true); return $this; }
durch
public function sendPaymentFailedEmail($checkout, $message, $checkoutType = 'onepage') { return $this; }
zu ersetzen.
Würde aber auch funktionieren 😉 Es kann jedoch sein, dass sich das System trotzdem in der exception.log beschwert. Aber Mails kommen keine mehr bzgl. “Zahlung fehlgeschlagen”.
Verwendet in Magento 1.9.4.0