doppelte Ordermail bei Backend Bestellugen SW Plugin

Hallo,
wer das Plugin Backend Bestellungen (aktuelle Version 1.0 von SW einsetzt, der hat das Problem das die Bestellbestätigungsmail 2 mal an den Kunden gesendet wird.

Als Beispiel:
erste Mail: kunde@kundenmail.de
zweite Mail: kunde@kundenmail.de, office@meinshop.de

Also einmal Kundenemailadresse und einmal die, die in der Konfiguration des Shops hinterlegt ist.

Dazu gibt es seit längerem auch dieses Ticket PT-3960. Vielleicht können hier ein paar voten um das Ganze etwas zu priorisieren!

Zuständig dafür ist die folgende Funktion unter
Pfad: /engine/Shopware/Plugins/Community/Backend/SwagBackendOrder/Controllers/Backend/SwagBackendOrder.php

private function sendOrderConfirmationMail($orderModel)
    {
        $context = $this->prepareOrderConfirmationMailData($orderModel);
        $context['sOrderDetails'] = $this->prepareOrderDetailsConfirmationMailData($orderModel);

        $mail = Shopware()->TemplateMail()->createMail('sORDER', $context);
        $mail->addTo($context["additional"]["user"]["email"]);
        $mail->send();

        //If configured send an email to the shop owner
        $mailNotToShopOwner = Shopware()->Config()->get('no_order_mail');
        if (!$mailNotToShopOwner) {
            $mail->addTo(Shopware()->Config()->get('mail'));
            $mail->send();
        }
    }

Ich habe nun folgendes im unteren Teil in der if Anweisung zusätzlich eingefügt:

        $mail = Shopware()->TemplateMail()->createMail('sORDER', $context);

Dadurch werden die eMails wieder korrekt versendet. Eine an den Shopadmin und eine an den Kunden. Die Frage ist aber ob dieser Weg so ok ist, oder ob es hier eine bessere Vorgehensweise gibt?!

Hier der komplette Code:

    private function sendOrderConfirmationMail($orderModel)
    {
        $context = $this->prepareOrderConfirmationMailData($orderModel);
        $context['sOrderDetails'] = $this->prepareOrderDetailsConfirmationMailData($orderModel);

        $mail = Shopware()->TemplateMail()->createMail('sORDER', $context);
        $mail->addTo($context["additional"]["user"]["email"]);
        $mail->send();

        //If configured send an email to the shop owner
        $mailNotToShopOwner = Shopware()->Config()->get('no_order_mail');
        if (!$mailNotToShopOwner) {
            $mail = Shopware()->TemplateMail()->createMail('sORDER', $context);
            $mail->addTo(Shopware()->Config()->get('mail'));
            $mail->send();
        }
    }

Gruß Creatixx

 

PS: WOW geiler Editor!!!  enlightened

Hi,

ja, das erscheint mir sinnvoll, der Fehler ist ja, dass auf dem bestehenden Mail-Model gearbeitet wird - und die Methode “addTo” kein Setter, sondern ein “Adder” ist - darum bekommt der Kunde zwei Mails. Alternativ könnte es auch mit “$mail->clearRecipients()” gehen.

Besten Gruß,

Daniel

@Daniel Nögel

Danke für deine Bestätigung. Ich habe es jetzt mal auf $mail->clearRecipients(); umgestellt, und funktioniert auch wie gewünscht!  no

Gruß Creatixx

Es ist wirklich traurig, dass der Fehler immer noch aktiv ist und man bei jedem Update händisch nachsteuern muss.

eigentlich könntest du dir das 2. createMail sparen wenn du das send erst nach der if-abfrage ausführst.

ungetestet:

private function sendOrderConfirmationMail($orderModel)
    {
        $context = $this->prepareOrderConfirmationMailData($orderModel);
        $context['sOrderDetails'] = $this->prepareOrderDetailsConfirmationMailData($orderModel);

        $mail = Shopware()->TemplateMail()->createMail('sORDER', $context);
        $mail->addTo($context["additional"]["user"]["email"]);

        //If configured send an email to the shop owner
        $mailNotToShopOwner = Shopware()->Config()->get('no_order_mail');
        if (!$mailNotToShopOwner) {
            $mail->addTo(Shopware()->Config()->get('mail'));
        }

        $mail->send();

    }