Email Versand im Extbase Controller

Mail Versand mit responsiven Fluid Templates

E-Mails auf dem Smartphone abzurufen ist heute ein weit verbreiteter Standard. Wer mehr als einfache Textmails versenden will muss sich auch mit responsiven E-Mail Templates auseinandersetzten.
Eine Anleitung zur Nutzung des Fluid StandAlone Views zum Rendern des Templates:


Die Template Erstellung

E-Mail Clients sind ja leider aus einer anderen Welt und verstehen kaum modernes html markup. Da helfen nur Tabellen und inline CSS um eine gestaltete E-Mail auf allen Systemen möglichst gleich aussehen zu lassen.

Um uns die Arbeit etwas zu erleichtern können wir auf ein freies Framework zurückgreifen, mein Favorit ist Zurb (http://zurb.com/ink/). Dort gibt es verschiedene Basis Templates die wir nach unseren Anforderungen umbauen können. Das ist nicht weiter schwierig - reines html mit CSS Angaben im Dateikopf - man darf sich nur nicht in den unendlichen Tabellenkonstrukten verlieren ;)

Sobald wir unsere Template im Browser geprüft haben ersetzen wir alle dynamischen Texte durch Fluid Variabeln "{myContent}" und, wichtig, wandeln das CSS in Inline CSS um. Dazu können wir den Inliner von Zurb verwenden, MailChimp bietet etwas ähnliches an. Für spätere Änderungen sollten wir die Originaldatei ohne inline CSS sichern.

Unsere fertiges E-Mail Template mit inline CSS legen wir in unseren Extensionordner unter:
Resources -> Private -> Templates -> Email


Der Mailversand

In unserer Controller Action füllen wir alle benötigten Variabeln. Das Contentarray besteht aus den Markern die wir vorher in unserem Fluid Template definiert haben:

 

$recipient    = "der@empfänger.de";
$sender       = "mein@Absender.de";
$subject      = "Betreffzeile der Mail"
$templateName = "Mytemplate_ohne_suffix_html"

$content = array('titel' => 'Vielen Dank für Ihre Anmeldung.',
                 'veranstaltung' => 'Veranstaltung: ' . $eventObject->getTitle(),
                 'termin' => 'Termin: ' . date('d. M', $eventObject->getDate()->getTimestamp()),
                 'reserviert' => $reservation
                 );

Am Ende unserer Funktion rufen wir den Mailversand auf:

$this->sendTemplateEmail($recipient, $sender, $subject, $templateName, $variables);

Aufruf des Email Templates und Versand

Im ersten Teil unserer Funktion nutzen wir den Fluid StandaloneView und füllen die Variabeln des Templates.
Mit der Zeile

$emailBody = $emailView->render();

steht uns das befüllte Template zur Verfügung.

Im zweiten Schritt laden wir die mail Klasse, setzten Sender, Absender, Betreff und Content und senden schließlich die mail.

Die komplette Funktion:

   /**
     * @param array $recipient recipient of the email in the format array('recipient@domain.tld' => 'Recipient Name')
     * @param array $sender sender of the email in the format array('sender@domain.tld' => 'Sender Name')
     * @param string $subject subject of the email
     * @param string $templateName template name (UpperCamelCase)
     * @param array $variables variables to be passed to the Fluid view
     * @return boolean TRUE on success, otherwise false
     */
    protected function sendTemplateEmail(array $recipient, array $sender, $subject, $templateName, array $variables = array()) {
        $emailView = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
        $extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
        $templateRootPath = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName($extbaseFrameworkConfiguration['view']['templateRootPath']);
        $templatePathAndFilename = $templateRootPath . 'Email/' . $templateName . '.html';
        $emailView->setTemplatePathAndFilename($templatePathAndFilename);
        $emailView->assignMultiple($variables);
        $emailBody = $emailView->render();

        /** @var $message \TYPO3\CMS\Core\Mail\MailMessage */
        $message = $this->objectManager->get('TYPO3\\CMS\\Core\\Mail\\MailMessage');
        $message->setTo($recipient)
                ->setFrom($sender)
                ->setSubject($subject);

        // Possible attachments here
        //foreach ($attachments as $attachment) {
        //    $message->attach($attachment);
        //}
        // Plain text example
        //$message->setBody($emailBody, 'text/plain');

        // HTML Email
        $message->setBody($emailBody, 'text/html');

        $message->send();
        return $message->isSent();
    }


Mit dieser Funktion könnt ihr relativ schnell und einfach gestaltete Fluid Templates versenden.

Weitere Artikel zu diesem Thema:

Empfehlenswerte Lektüre:

HTML5 Handbuch

Stefan Münz (Gründer von SELFHTML) geht in der 10. Auflage seines Bestsellers auf die Besonderheiten von HTML5 und CSS3 ein. Dabei wird ebenso die Ausgabe auf Smaptphones und Handys berücksichtigt, wie auch jQuery als Scriptsprache. Damit ist das Buch ein wertvoller Ratgeber für alle die Webseiten entwickeln unabhängig vom eingesetztem CMS System.

Kommentare

keine Kommentare vorhanden


Kommentar verfassen

Die Email Adresse wird nicht veröffentlicht.