[GELÖST] Event oder Hook für sendMail() oder createMail()?

Hallo liebe shopware - Gemeinde,

gibt es ein Event oder eine Hook, wo man sich an die sendMail()-Funktion (sAdmin.php) oder die createMail()-Funktion (TemplateMail.php) dranhängen kann, um davor oder danach etwas auszuführen (beispielsweise eine E-Mail an den Shopbetreiber, etc.), also beim Senden jeglicher E-Mails, egal wo oder durch wen die EMail-Senden-Aktion angestoßen wurde?

 $this-\>subscribeEvent( 'sAdmin::sendMail::after', 'onSendMail' ); 

Mit dem Code würde ich mich ja zumindestens schonmal an die sendMail()-Funktion dranhängen können, ich bin mir nur unsicher, ob die auch wirklich überall verwendet wird, um E-Mails zu senden. Komme ich irgendwie an die Daten innerhalb der Funktion ran (Template, Kontext, etc.), oder müsste ich sie komplett überschreiben (replace)? Sie hat ja keinen Rückgabewert.

die createMail()-Funktion scheint ja von allen genutzt zu werden, aber da dürfte es ja kein Event oder Hook geben oder?

Beste Grüße

Sebastian

Hallo sschreier, Ich habe mir das mal kurz angesehen. Die sendMail() Funktion der sAdmin Klasse nutzt auch die Funktion Shopware()->TemplateMail()->createMail(…). Diese gibt ein Objekt der Klasse Enlight_Components_Mail zurück. Ich denke mal, dass Shopware diese Klasse für alle Emails verwendet. Und das Beste daran: Es gibt ein fertiges Event in dieser Klasse namens “Enlight_Components_Mail_Send”. Damit solltest du wirkliche jede Email, die über Shopware versendet wird, abfangen können. // Registrierung $this-\>subscribeEvent( 'Enlight\_Components\_Mail\_Send', 'onMailSend' ); // Listener public function onMailSend(Enlight\_Event\_EventArgs $arguments) { $mail = $arguments-\>getSubject(); $transport = $arguments-\>getTransport(); /\* ... \*/ } Viele Grüße P.S. Der BBCode “code” geht schon wieder nicht :shock:

1 Like

[quote=„simkli“]Hallo sschreier, Ich habe mir das mal kurz angesehen. Die sendMail() Funktion der sAdmin Klasse nutzt auch die Funktion Shopware()->TemplateMail()->createMail(…). Diese gibt ein Objekt der Klasse Enlight_Components_Mail zurück. Ich denke mal, dass Shopware diese Klasse für alle Emails verwendet. Und das Beste daran: Es gibt ein fertiges Event in dieser Klasse namens „Enlight_Components_Mail_Send“. Damit solltest du wirkliche jede Email, die über Shopware versendet wird, abfangen können. // Registrierung $this-\>subscribeEvent( 'Enlight\_Components\_Mail\_Send', 'onMailSend' ); // Listener public function onMailSend(Enlight\_Event\_EventArgs $arguments) { $mail = $arguments-\>getSubject(); $transport = $arguments-\>getTransport(); /\* ... \*/ } Viele Grüße P.S. Der BBCode „code“ geht schon wieder nicht :shock:[/quote] Hallo simkli, danke erstmal für deine Hilfe, das Event war genau das, was ich gesucht (und übersehen) habe. Nur bekomme ich (beispielsweise beim Senden einer Status-E-Mail) bei $mail = $arguments->getSubject(); und $transport = $arguments->getTransport(); jeweils null zurückgeliefert. Ansich müsste die Funktion bzw. das Event ja das Mail-Objekt zurückwerfen, auf das man zugreifen könnte (wie mit $arguments->getSubject() auf den Betreff). Nur ist der Wert, der zurückgeliefert wird, null (sowohl bei der Bestellbestätigungsemail als auch bei den Statusemails). Hast du eine Idee, warum? Beste Grüße Sebastian

Hallo liebe Shopware - Gemeinde, ich habe das Problem nun gelöst und komme nun an die einzelnen Felder, es fehlte noch ein anderer Aufruf. Ich danke simkli für die Hilfe. Beste Grüße Sebastian

*reminder*