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
