Register E-Mail Hook / Überschreiben

Hallo Shopware Community,

momentan versuche ich bei der AccountRegistrationService.php herauszufinden wo die E-Mail an den neu regestrierten Benutzer geht. Damit ich diese ausstellen kann und eine eigene nach einem bestimmten Event an den Benutzer senden möchte.

So wie ich das sehe, wird am Ende (sofern nicht DoubleOptIn aktiviert ist)

$this->eventDispatcher->dispatch(new CustomerRegisterEvent($context, $customerEntity));

aufgerufen. In CustomerRegisterEvent.php  ist die public function getMailStruct(): MailRecipientStruct. Wird diese automatisch aufgerufen wenn das Event getriggerd wird und daher die E-Mail gesendet? Sofern ja, wie könnte ich diese ausstellen? Momentan schaue ich ob das CustomerRegisterEvent getriggered wird, und nach einigen Aktionen müsste die E-Mail erst gesendet werden. (eine Art externer Benutzer check)

 

Grüße

Hat sowas ähnliches noch keiner probiert?

https://forum.shopware.com/discussion/comment/266889/#Comment_266889

https://github.com/shopware/platform/issues/601

https://github.com/shopware/platform/pulls?q=Mail

Wenn Shopware 6.1 in sicht ist, mach ich ein Plugin bzw. aktualisiere ich meins:

https://github.com/hlohaus/SheMailer

@h_lohaus schrieb:

https://forum.shopware.com/discussion/comment/266889/#Comment_266889

https://github.com/shopware/platform/issues/601

https://github.com/shopware/platform/pulls?q=Mail

Wenn Shopware 6.1 in sicht ist, mach ich ein Plugin bzw. aktualisiere ich meins:

https://github.com/hlohaus/SheMailer

Hab mir jetzt eine Pullrequest angeschaut und die anderen Links. Das einzige was dem am nächsten kommt ist diese Frage. Ich warte auf das Event CustomerRegisterEvent , sende ein curl raus an ein WaWi, bekomme eine Kundennummer zurück, editiere den Benutzer mit seiner neuen Kundennummer, damit er sich mit dieser einloggen kann.

Habe auch in der E-Mail schon 

Kunden-Nr. {{ customer.customerNumber }}

das hinzugefügt, nur ist dort noch die alte KundenNummer drin & nicht die neue.

Achso. Dann ändere doch vorher die Kundennumer. In der eMail geht es aktuell nicht.

@h_lohaus schrieb:

Achso. Dann ändere doch vorher die Kundennumer. In der eMail geht es aktuell nicht.

Wie soll ich denn vorher die Kundenummer ändern? Momentaner Ablauf:

  • Ich registriere mich
  • CustomerRegisterEvent:class schlägt an 
  • curl request and das WaWi
  • WaWi gibt mir eine Kundenummer zurück
  • Shopware Customer bearbeite ich mit der Kundenummer

In dieser Zeit ist die E-Mail schon verschickt worden.

 

Update: Mir würde es ja schon reichen, wenn ich die Registrierungsbestätigung einfach ausschalten könnte, dann würde ich nach dem Customer bearbeiten einfach eine senden.

Das Event wird doch eigentlich gefeuert, weil es die eMail verschickt. Du kannst dich doch früher registrieren.

@h_lohaus schrieb:

Das Event wird doch eigentlich gefeuert, weil es die eMail verschickt. Du kannst dich doch früher registrieren.

Bei allem Respekt, aber ich verstehe nicht was du mir damit sagen willst. Ja das Event wird gefeuert, ich reagiere ja auch darauf. Wie soll ich mich früher registrieren als im Shop beim Absenden des Registrierformulars? 

    public static function getSubscribedEvents()
    {
        return [
            EventName::class => ['methodName', 200]]
        ];
    }

Das 200 beudeutet 200x früher. :slight_smile:

@h_lohaus schrieb:

public static function getSubscribedEvents()
{
return [
EventName::class => [‚methodName‘, 200]]
];
}

Das 200 beudeutet 200x früher. :)

Idee war nicht schlecht (Wusste auch nicht das es geht) leider ist in der E-Mail noch die alte customersNumber drin. 

hast du $event->getCustomer() bearbeitet? Ich glaub die wird vorher aus der DB geholt.

@h_lohaus schrieb:

hast du $event->getCustomer() bearbeitet? Ich glaub die wird vorher aus der DB geholt.

Nein habe ich nicht. Also der curl der von meinem Plugin ausgeht der auf das Event CustomerRegister hört macht über ein SOAP Client eine Verbindung an das WaWi, danach bekomme ich eine neue CustomerNo (vom WaWi) und bearbeite anhand des $event->getCustomer[‚id‘] über die Shopware API den Customer. Gerne kann ich auch etwas Code anhängen, falls es immer noch nicht so wirklich verständlich ist / war.

Ja, versuche mal:

 $event-\>getCustomer()-\>setCustomerNumber(123);

@h_lohaus schrieb:

Ja, versuche mal:

$event->getCustomer()->setCustomerNumber(123);

Habe nun ein return value mit der CustomerNumber genommen und setzte diese wie in deinem Beispiel. Die richtige CustomerNumber steht nun auch in der E-Mail! (So wie es sein sollte) ein $event->getCustomer() save  habe ich nicht gefunden, deswegen muss ich momentan noch den Customer mit der API bearbeiten und die neue CustomerNumber speichern. Danke für den Hinweis.