Plugin 5.2 Mail Vorlage erstellen

Hallo zusammen,

ich bin eben dabei ein Plugin auf Basis des neuen > 5.2 Prinzips zu erstellen.
Das Plugin soll nun eine E-Mail Vorlage erstellen wenn es installiert wird.

Wie man dies mit dem alten Prinzip gemacht hat, ist mir bewusst, aber gibt es irgendwo eine Anleitung wie man das nach dem neuen Prinzip machen kann?
Ich habe bisher leider nichts dazu gefunden und nach dem alten Prinzip scheint es nicht mehr zu funktionieren.

Hoffe jemand kann mir einen Hinweis geben.

Herzlichen Dank.

Hallo,

ein solches neues E-Mail Template anzulegen, sollte nicht schwer sein. Das ist einfach ein neuer Eintrag in der s_core_config_mails. Darin in den jeweiligen Spalten wird dann Smarty Code eingetragen. Du kannst hier auch Smarty Templates von der Festplatte einbinden, wie es schon in etlichen bestehenden E-Mail Templates gemacht wird. Einfach mal daran ein Beispiel nehmen.

Groß Anleitungen, wie Du dann Deine eigene E-Mail auf Basis des neu erstellten Templates versenden kannst, wirst Du kaum finden. An solchen Stellen ist Sopware schlecht bis gar nicht dokumentiert. Wenn Du Glück hast, dann findest Du noch etwas PHPDoc über den Methoden. Wie gesagt, wenn Du Glück hast, das ist leider auch nicht immer so.

Da ich gerade an einem ähnlichen Problem arbeite, kann ich Dir grob sagen, welche Datei(en) einen Blick wert sind. In der engine/Shopware/Core/sOrder.php findest Du etliche nützliche Events zum Thema E-Mail Templates.

In Deinem Spezialfall, um die Shopware interna zu verstehen, bzw. um die richtigen Events etc. zu finden, hilft wirklich leider nur Code anschauen, verstehen und seine Schlüsse daraus ziehen. Je näher man an den Core kommst, desto weniger Dokumentationsmaterial findet man dazu. Das kann ich Dir jedenfalls aus meiner Erfahrung heraus sagen. Ansonsten könnten noch folgende Beiträge aus der Doku nützlich sein:

https://developers.shopware.com/developers-guide/plugin-system/

https://developers.shopware.com/plugin-guide/

 

Die meisten Guides in der Doku beziehen sich leider auch noch auf das alte Plugin System. Es gibt lediglich zwei Seiten für das neue 5.2 Plugin System: Der Upgrade Guide und der 2. Link aus der Link Liste.

 

Hoffe, ich konnte damit etwas helfen. Auf der anderen Seite muss ich fairerweise sagen, dass wir froh sein können, dass überhaupt etwas dokumentiert ist. Andere openSource Projekte sind gar nicht dokumentiert. Und wie allgemein bekannt ist, schreiben Programmierer nicht gerne Dokus. Man sollte also mit dem Happen an Doku dankbar zufrieden sein… Es kann auch sein, dass sie die Core Funktionen in den hauseigenen Trainings vermitteln, das weiß ich nicht genau. Es ist durchaus auch üblich, dass das Produkt selber als openSource kostenlos ist, die Dokumentation dazu aber kostet.

 

MFG 

 

derwunner

1 „Gefällt mir“

Herzlichen Dank erstmal für Deine Antwort.

Wie man eine E-Mail mit einem gewählten Template verschickt habe ich schonmal irgendwo gefunden,
war aber glaube ich auch für das alte Plugin System wenn ich mich nicht täusche.

Werde hier mal ein wenig rumprobieren und auch die genannten URLs von Dir genauer ansehen.

Sollte ich irgendwas wertvolles herausfinden, gebe ich hier gerne nochmal Rückmeldung.

 

Vielleicht findet sich ja doch noch jemand der schonmal ein Plugin mit ähnlichen Funktionen auf Basis von > 5.2 geschrieben hat und bereit ist seine Erkenntnisse zu teilen :slight_smile:

Ok, habs nun hinbekommen die Mail-Vorlage vom Plugin erstellen zu lassen.

Für diejenigen die etwas ähnliches umsetzen möchten:
Innerhalb der install Methode die createMailTemplate Methode aufrufen, die z.B. wie folgt aussehen könnte:

private function createMailTemplate()
{
    $em = $this->container->get('models');
    if(!$repository) {
        $repository = $em->getRepository(Mail::class);
    }
    $mail = $repository->findOneBy(['name' => 'myMAILTEMPLATE']);
    if(!$mail) {
        $content = "Dies ist ein Test\n\n{config name=shopName}";
        $mail = new Mail();
        $mail->setName('myMAILTEMPLATE');
        $mail->setFromMail('{config name=mail}');
        $mail->setFromName('{config name=shopName}');
        $mail->setSubject("Testmail Titel");
        $mail->setContent($content);
        $mail->setMailtype(Mail::MAILTYPE_SYSTEM);

        $em->persist($mail);
        $em->flush($mail);
    }
}

 

2 „Gefällt mir“

@iLuHa‍ , eine Frage zu deiner Maillösung. Kann man auch eine Einweg-Mailvorlage on-Fly machen ohne dass diese im Backend dann erscheint?

@brettvormkopp schrieb:

@iLuHa‍ , eine Frage zu deiner Maillösung. Kann man auch eine Einweg-Mailvorlage on-Fly machen ohne dass diese im Backend dann erscheint?

Wenn du die Vorlage im Backend nicht brauchst, brauchst du auch keine Vorlage erstellen.
Man kann die E-Mail auch innerhalb des PHP Codes generieren und verschicken.

Wie man das mit > 5.2 macht bin ich mir aktuell nicht sicher, mit dem alten Plugin System habe ich sowas aber schonmal realisiert.

Kann dir morgen mal einen Code-Beispiel posten, wie man eine E-Mail direkt aus dem Plugin verschickt ohne die Vorlage im Backend.
Der Nachteil daran ist eben, dass man den Mail-Text nicht über das Backend verändern kann, sondern dieser dann eben Hardcoded im Plugin steht.

@brettvormkopp

Anbei ein Code Beispiel wie man eine E-Mail direkt aus dem Plugin verschicken kann (vor dem 5.2 Plugin System, weiß nicht ob es mit > 5.2 immernoch so funktioniert) ohne die Mail Vorlage im Backend.

$mail = Shopware()->Mail();
$mail->IsHTML(1);
$mail->From = Shopware()->Config()->Mail;
$mail->FromName = Shopware()->Config()->Mail;
$mail->Subject = "E-Mail Betreff";
$mail->Body = $content;
$mail->ClearAddresses();
$mail->AddAddress(email@domain.com, email@domain.com);
if (!$mail->Send()) {
    return "Beim Senden der E-Mail ist ein Fehler aufgetreten.";
} else {
    return "E-Mail wurde verschickt.";
}

Über isHTML(1) setzt man, dass die E-Mail im HTML Format verschickt wird (0 entspricht Plaintext).
Die Absender-Adresse wird in dem Beispiel aus den Shopware Konfigurationen bezogen.
Und der Inhalt der E-Mail steht dann in der $content Variable als HTML-String.

1 „Gefällt mir“