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!
Hallo.
Jigal hat zur "neuen" Mail API damals einen Artikel geschrieben:New mail API for the core - TYPO3 4.5 comes with the Swift Mailer library as the new mail API. It's quite easy to use it in extensions.
Im Artikel sind zwar noch die alten, namespacelosen Klassennamen drin, aber von Prinzip her gilt alles noch immer.
Oder wo genau hängst Du bei der Benutzung der Mail-API?
Viele Grüße
Julian
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?
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
);
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.