/**
  * Show a preview or the final version of an email
  * For this method we don't use extbase parameters system to have an URL as short as possible
  */
 public function showAction()
 {
     // Override settings to NOT embed images inlines (doesn't make sense for web display)
     global $TYPO3_CONF_VARS;
     $theConf = unserialize($TYPO3_CONF_VARS['EXT']['extConf']['newsletter']);
     $theConf['attach_images'] = false;
     $TYPO3_CONF_VARS['EXT']['extConf']['newsletter'] = serialize($theConf);
     $newsletter = null;
     $email = null;
     $isPreview = empty($_GET['c']);
     // If we don't have an authentification code, we are in preview mode
     // If it's a preview, an email which was not sent yet, we will simulate it the best we can
     if ($isPreview) {
         // Create a fake newsletter and configure it with given parameters
         $newsletter = $this->objectManager->create('Tx_Newsletter_Domain_Model_Newsletter');
         $newsletter->setPid(@$_GET['pid']);
         $newsletter->setUidRecipientList(@$_GET['uidRecipientList']);
         if ($newsletter) {
             // Find the recipient
             $recipientList = $newsletter->getRecipientList();
             $recipientList->init();
             while ($record = $recipientList->getRecipient()) {
                 // Got him
                 if ($record['email'] == $_GET['email']) {
                     // Build a fake email
                     $email = $this->objectManager->create('Tx_Newsletter_Domain_Model_Email');
                     $email->setRecipientAddress($record['email']);
                     $email->setRecipientData($record);
                 }
             }
         }
     } else {
         $email = $this->emailRepository->findByAuthcode($_GET['c']);
         if ($email) {
             $newsletter = $email->getNewsletter();
             // Here we need to ensure that we have real newsletter instance because of type hinting on Tx_Newsletter_Tools::getConfiguredMailer()
             if ($newsletter instanceof Tx_Extbase_Persistence_LazyLoadingProxy) {
                 $newsletter = $newsletter->_loadRealInstance();
             }
         }
     }
     // If we found everything needed, we can render the email
     $content = null;
     if ($newsletter && $email) {
         // Override some configuration
         // so we can customise the preview according to selected settings via JS,
         // and we can also prevent fake statistics when admin 'view' a sent email
         if (isset($_GET['plainConverter'])) {
             $newsletter->setPlainConverter($_GET['plainConverter']);
         }
         if (isset($_GET['injectOpenSpy'])) {
             $newsletter->setInjectOpenSpy($_GET['injectOpenSpy']);
         }
         if (isset($_GET['injectLinksSpy'])) {
             $newsletter->setInjectLinksSpy($_GET['injectLinksSpy']);
         }
         $mailer = Tx_Newsletter_Tools::getConfiguredMailer($newsletter, @$_GET['L']);
         $mailer->prepare($email, $isPreview);
         if (@$_GET['plain']) {
             $content = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><pre>';
             $content .= $mailer->getPlain();
             $content .= '</pre></body></html>';
         } else {
             $content = $mailer->getHtml();
         }
     }
     $this->view->assign('content', $content);
 }
Example #2
0
 /**
  * Method that accually runs the spool
  *
  * @global \TYPO3\CMS\Core\Database\DatabaseConnection $TYPO3_DB
  * @param resource SQL-resultset from a select from tx_newsletter_domain_model_email
  * @return void
  */
 private static function runSpool($rs)
 {
     global $TYPO3_DB;
     $emailSentCount = 0;
     $mailers = array();
     $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Tx_Extbase_Object_ObjectManager');
     $newsletterRepository = $objectManager->get('Tx_Newsletter_Domain_Repository_NewsletterRepository');
     $emailRepository = $objectManager->get('Tx_Newsletter_Domain_Repository_EmailRepository');
     $oldNewsletterUid = null;
     while (list($newsletterUid, $emailUid) = $TYPO3_DB->sql_fetch_row($rs)) {
         /* For the page, this way we can support multiple pages in one spool session */
         if ($newsletterUid != $oldNewsletterUid) {
             $oldNewsletterUid = $newsletterUid;
             $mailers = array();
             $newsletter = $newsletterRepository->findByUid($newsletterUid);
         }
         // Define the language of email
         $email = $emailRepository->findByUid($emailUid);
         $recipientData = $email->getRecipientData();
         $L = $recipientData['L'];
         // Was a language with this page defined, if not create one
         if (!is_object($mailers[$L])) {
             $mailers[$L] =& Tx_Newsletter_Tools::getConfiguredMailer($newsletter, $L);
         }
         // Mark it as started sending
         $email->setBeginTime(new DateTime());
         $emailRepository->updateNow($email);
         // Send the email
         $mailers[$L]->send($email);
         // Mark it as sent already
         $email->setEndTime(new DateTime());
         $emailRepository->updateNow($email);
         $emailSentCount++;
     }
     // Log numbers to syslog
     Tx_Newsletter_Tools::log("Sent {$emailSentCount} emails");
 }