* ***/ use TYPO3\CMS\Core\Mail\MailMessage; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder; use TYPO3\CMS\Extbase\Object\ObjectManager; use TYPO3\CMS\Extbase\Service\ImageService; use TYPO3\CMS\Fluid\View\StandaloneView; use TYPO3\CMS\Fluid\View\TemplatePaths; use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; /** * */ class MailUtility { /** * tages maildata, builds html and text mails an decides where to send them * allows to intercept sender for testing * * @param string $target email or group identifier * @param string $subject mail subject, prefixed by setting in ts * @param array $data content for email, gets parsed in different ways * @return void */ public static function sendMail( $target, $sender, $subject, $data, $templateRootPaths = null, $templateNameHtml = null, $templateNameText = null ) { if (!$templateRootPaths) { $templatePaths = new TemplatePaths(); $templatePaths->fillDefaultsByPackageName('templates_aide'); $templateRootPaths = $templatePaths->getTemplateRootPaths(); } if (!$templateNameHtml) { $templateNameHtml = 'Mails/DefaultHtml'; } if (!$templateNameText) { $templateNameText = 'Mails/DefaultText'; } $objectManager = GeneralUtility::makeInstance(ObjectManager::class); $configurationManager = $objectManager->get( ConfigurationManagerInterface::class ); $typoScript = $configurationManager->getConfiguration( ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT ); $settings = (array)$typoScript['module.']['tx_templatesaide.']['settings.']; $settings = GeneralUtility::removeDotsFromTS($settings); $htmlView = $objectManager->get(StandaloneView::class); $htmlView->getTemplatePaths()->fillDefaultsByPackageName( 'templates_aide' ); $htmlView->setTemplateRootPaths($templateRootPaths); $htmlView->setTemplate($templateNameHtml); $textView = $objectManager->get(StandaloneView::class); $textView->getTemplatePaths()->fillDefaultsByPackageName( 'templates_aide' ); $textView->setTemplateRootPaths($templateRootPaths); $textView->setTemplate($templateNameText); $mail = GeneralUtility::makeInstance(MailMessage::class); $mail->setFrom($sender); $mail->setSubject($subject); $bodydataText = []; $bodydataHtml = []; foreach ($data as $row) { switch($row['type']) { case 'text': case 'headline': $htmlRow = $row; $htmlRow['data'] = preg_replace_callback( '/\[.*\]/mU', function($matches) { foreach ($matches as $match) { return preg_replace_callback( '/\[(\S*)\s(.*)\]/mU', function($matchesInner) { return '' . $matchesInner[2] . ''; }, $match ); } }, $htmlRow['data'] ); $textRow = $row; $textRow['data'] = preg_replace_callback( '/\[.*\]/mU', function($matches) { foreach ($matches as $match) { return preg_replace_callback( '/\[(\S*)\s(.*)\]/mU', function($matchesInner) { return $matchesInner[2] . ': ' . $matchesInner[1]; }, $match ); } }, $textRow['data'] ); $bodydataText[] = $textRow; $bodydataHtml[] = $htmlRow; break; case 'button': case 'buttons': $htmlRow = $row; //$htmlRow['targets'] = preg_replace_callback( // '/\[.*\]/mU', // function($matches) { // foreach ($matches as $match) { // return preg_replace_callback( // '/\[(\S*)\s(.*)\]/mU', // function($matchesInner) { // return $matchesInner; // //return '' // // . $matchesInner[2] // // . ''; // }, // $match // ); // } // }, // $htmlRow['targets'] //); $textRow = $row; //$textRow['targets'] = preg_replace_callback( // '/\[.*\]/mU', // function($matches) { // foreach ($matches as $match) { // return preg_replace_callback( // '/\[(\S*)\s(.*)\]/mU', // function($matchesInner) { // return $matchesInner; // //return $matchesInner[2] // // . ': ' // // . $matchesInner[1]; // }, // $match // ); // } // }, // $textRow['targets'] //); $bodydataText[] = $textRow; $bodydataHtml[] = $htmlRow; break; case 'attachmentBase64': $attachmentdata = explode(',', $row['data']); preg_match('/\w*:(.*);\w*/', $attachmentdata[0], $matches); $mimetype = $matches[1]; preg_match('/\w*\/(.*);\w*/', $attachmentdata[0], $matches); $fileextension = $matches[1]; $mail->attach(new \Swift_Attachment( base64_decode($attachmentdata[1]), 'attachment.' . $fileextension, $mimetype )); break; } } $textView->assign('content', $bodydataText); $htmlView->assign('content', $bodydataHtml); $domain = $settings['mailDomain']; $htmlView->assign('domain', $domain); $textBody = $textView->render(); $htmlBody = $htmlView->render(); $mail->setBody($textBody); $mail->addPart($htmlBody, 'text/html'); $recipients = explode( ',', $target ); if ($GLOBALS['TYPO3_CONF_VARS']['MAIL']['intercept_to']) { $subjectOrig = $mail->getSubject(); $recipientsIntercecpted = explode( ',', $GLOBALS['TYPO3_CONF_VARS']['MAIL']['intercept_to'] ); foreach ($recipientsIntercecpted as $recipientIntercepted) { foreach ($recipients as $recipient) { $mail->setSubject( $subjectOrig . ' [ORIG-TO: ' . trim($recipient) . ']' ); $mail->setTo(trim($recipientIntercepted)); $mail->send(); } } } else { foreach ($recipients as $recipient) { $mail->setTo(trim($recipient)); $mail->send(); } } } }