Wie man E-Mails in TYPO3 versendet

Der E-Mailversand ist ein altes aber immer noch zentrales Thema in der Webentwicklung. TYPO3 bietet mit dem Swift Mailer ein einfaches Framework mit.

Copy & Paste Vorlagen

Einfaches Beispiel

$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class);
$mail->setFrom(array($email => $name))
     ->setTo(array($email => $name))
     ->setSubject($subject)
     ->setBody($body)
     ->send();

Mit Dateianhängen

$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class);
$mail->setFrom(array($email => $name))
     ->setTo(array($email => $name))
     ->setSubject($subject)
     ->setBody($body);

foreach($attachments as $attachment)
{
    $attachment = \Swift_Attachment::fromPath('/path/to/image.jpg', 'image/jpeg');
    $attachment->setFilename('example.jpg');
    $mail->attach($attachment);
}

$mail->send();

E-Mail als HTML Template

use TYPO3\CMS\Core\Utility\GeneralUtility;

// E-Mail Text mit HTML Layout erstellen via StandaloneView
$objectManager = GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class);
$view = $objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
        
$view->setLayoutRootPaths('EXT:example/Resources/Private/Layouts/');
$view->setPartialRootPaths('EXT:example/Resources/Private/Partials/');
$view->setTemplateRootPaths('EXT:example/Resources/Private/Templates/');
$view->setTemplatePathAndFilename('EXT:example/Resources/Private/Templates/Email//Basic/Default.html');
$view->assignMultiple($variables);
        
$htmlContent = $view->render();

// Mail verschicken
$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class);
$mail->setFrom(array($email => $name))
     ->setTo(array($email => $name))
     ->setSubject($subject)
     ->setBody($htmlContent, 'text/html')
     ->send();

Erläuterungen

Ich denke das meiste ist relativ einfach und straight forward. Das letzte Beispiel bedarf es vielleicht ein paar Erläuterungen. 

Sobald man eine HTML E-Mail verschicken möchte, ist es sinnvoll das in Fluid umzusetzen. HTML Code mit PHP zu vermischen ist unschön, schlecht zu pflegen und extrem Oldschool. Dank Fluid ist ein HTML Layout komplett ohne PHP möglich.

Da das Versenden einer E-Mail generell in Extbase geschieht, müssen wir nun außerhalb der Viewebene ein Template rendern. Da können wir in Extbase mit der Klasse: StandaloneView sehr einfach machen.