Zum Inhalt springen

Wie Mails in eigene Extension automatisch verschicken

Erstellt am 8. Dezember 2016 · 4 Antworten · letzte Antwort am 2. Januar 2017

Tags: E-Mail-Versand, TYPO3 7, Frage

Bavaria_webmaster ·

Hallo zusammen,
habe nun mal wieder eine Frage:
Seit einiger Zeit versende ich automatisch Mails an die Mitglieder meines Vereins über die Standard php-Mail Funktion. Mein Script liegt in einem nicht Typo3-Verzeichnis auf dem Webspace und beinhalten einfach ein paar Datenbankabfragen (die Daten werden über eine eigene Backend-Extension in die Datenbank geschrieben), werden dann zu einer normalen Text-Mail zusammengebaut und versendet.

Nun wollte ich das ganze irgendwie in meine erstellte Typo3-Extension packen und etwas sicherer machen (habe erst kürzlich einen -vom Hoster vorgegebenen – SPF-Record in meinen DNS-Einstellungen eingebaut und habe damit mein einfaches Script ausgesperrt).

Da die Mails täglich an immer unterschiedliche Mitglieder versandt werden, ist ein automatischer Versand der Mails zwingend notwendig. Leider beinhaltet das Hostingpaket keine Cronjobs. Derzeit nutze ich einen externen Dienst (cron-jobs.org) für den automatisierten Versand.

Leider komme ich nicht darauf, wie ich mit der Mail API die Mails versendet bekomme.

Hat jemand für mich einen Ansatz wie bzw. wo man die Mails richtig erstellt und „sicher“ versendet?

Danke!

Bavaria_webmaster ·

Danke für Deine Rückmeldung!

Habe nun meine Mail so zusammengebaut (habe dies nach der offiziellen Dokumentation aufgebaut), dennoch wird meine Mail nicht versendet.

Derzeit liegt mein Mail-Script in meinem root-Verzeichnis und nicht in den Verzeichnis, in dem TYPO3 und co. liegt.

Muss diese Datei innerhalb dem Extensionordner liegen?

gochilla ·

Ihr seid hier im Forum für Version 7.6.14, da verstehe ich nicht den obigen Link zur uralten Methode. In modernen Fluid-Extensions versendet man ungefähr so E-Mails:

Im Controller oder auch Repository eine Funktion erstellen:

protected function sendTemplateEmail(array $recipient, array $sender, $subject, $templateName, array $variables = array()) {
	/** @var \TYPO3\CMS\Fluid\View\StandaloneView $emailView */
	$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']);
	$extPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('go_seminars');
        $templateRootPath = $extPath."/Resources/Private/Templates/";
        $templatePathAndFilename = $templateRootPath . 'Email/' . $templateName . '.html';
	$emailView->setTemplatePathAndFilename($templatePathAndFilename);
	$emailView->assignMultiple($variables);
	//$emailBody = $emailView->render();

        // if you have an additional html Template //
        // $templatePathAndFilename = $templateRootPath . 'Email/' . $templateName . 'Html.html';
	// $emailView->setTemplatePathAndFilename($templatePathAndFilename);
        $emailHtmlBody = $emailView->render();
	
        // if you want to use german or other UTF-8 chars in subject enable next line 
        // $subject =  '=?utf-8?B?'. base64_encode( subject  ) .'?=' ;

         /** @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(\Swift_Attachment::fromPath($attachment));
	//}

	// Plain text example
	//$message->setBody($emailBody, 'text/plain');

	// HTML Email
	$message->addPart($emailHtmlBody, 'text/html');

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

Variablen definieren und die Mail-Funktion dann entsprechend aufrufen:

$variables[content] = "Hier der Beispieltext einer tollen Mail...";

$this->sendTemplateEmail(
                array('info@mail.com' => 'Empfänger der Mail'), 
                array('info@mail.com' => 'Sender der Mail'), 
                'Ihr Mail-Betreff', 
                'MeinTemplate', 
                $variables
                );
Julian.​Hofmann ·

Der Link erklärt sich einfach: dort ist die prinzipielle Funktion der Mail-API erklärt.
Dass sich zwischenzeitlich ein paar Änderungen hinsichtlich der Einführung der Namespaces und bei Nutzung von Extbase ergeben haben, ist mir klar. Denke aber, dass diese Transferleistung kein Hindernis darstellen sollte.