Example #1
0
 public static function alternativeMultipartForTemplate($oTemplate, $sAlternative = null, $sCharset = null, $aTextifyMethods = 'markdown')
 {
     $sContent = $oTemplate->render();
     if ($sCharset === null) {
         $sCharset = $oTemplate->getCharset();
     }
     if ($sAlternative === null) {
         $sAlternative = $sContent;
     }
     if ($aTextifyMethods !== null) {
         if (!is_array($aTextifyMethods)) {
             $aTextifyMethods = explode('-', $aTextifyMethods);
         }
         foreach ($aTextifyMethods as $sTextfyMethod) {
             if ($sTextfyMethod === 'markdown') {
                 require_once 'markdownify/Markdownify_Extra.php';
                 $oMarkdownify = new Markdownify_Extra(false, false, false);
                 $sAlternative = $oMarkdownify->parseString($sAlternative);
             } else {
                 if ($sTextfyMethod === 'strip_tags') {
                     $sAlternative = strip_tags($sAlternative, '<' . implode('><', self::$ALLOWED_TAGS) . '>');
                 } else {
                     if ($sTextfyMethod === 'strip_tags/full') {
                         $sAlternative = strip_tags($sAlternative);
                     } else {
                         if ($sTextfyMethod === 'purify') {
                             require_once 'htmlpurifier/HTMLPurifier.standalone.php';
                             $oPurifierConfig = HTMLPurifier_Config::createDefault();
                             $sCacheDir = MAIN_DIR . '/' . DIRNAME_GENERATED . '/' . DIRNAME_CACHES . '/purifier';
                             if (!file_exists($sCacheDir)) {
                                 mkdir($sCacheDir);
                             }
                             $oPurifierConfig->set('Cache.SerializerPath', $sCacheDir);
                             $oPurifierConfig->set('AutoFormat.AutoParagraph', true);
                             $oPurifierConfig->set('HTML.AllowedElements', self::$ALLOWED_TAGS);
                             $oPurifier = new HTMLPurifier($oPurifierConfig);
                             $sAlternative = $oPurifier->purify($sAlternative);
                         }
                     }
                 }
             }
         }
     }
     $oMimeTree = new MIMEMultipart('alternative');
     $oMimeTree->addPart(MIMELeaf::leafWithText($sAlternative, '8bit', $sCharset));
     $oMimeTree->addPart(new MIMELeaf($sContent, 'text/html', '8bit', $sCharset));
     return $oMimeTree;
 }
 /** sendNewsletter()
  *
  * @param mixed string/object recipient
  * @param object oEmailTemplateInstance
  *
  * @return void
  */
 private function sendNewsletter($mRecipient, $oEmailTemplateInstance)
 {
     if (is_object($mRecipient)) {
         $oEmailTemplateInstance->replaceIdentifier('recipient', $mRecipient->getName());
         if ($mRecipient instanceof Subscriber && $this->oUnsubscribePage) {
             $sLanguageId = FrontendManager::shouldIncludeLanguageInLink() ? $this->oNewsletter->getLanguageId() : false;
             if (method_exists($mRecipient, 'getUnsubscribeQueryParams')) {
                 $sUnsubscribeLink = LinkUtil::absoluteLink(LinkUtil::link($this->oUnsubscribePage->getLink(), 'FrontendManager', $mRecipient->getUnsubscribeQueryParams(), $sLanguageId));
                 $oEmailTemplateInstance->replaceIdentifier('unsubscribe_link', $sUnsubscribeLink);
             }
         }
     } else {
         $oEmailTemplateInstance->replaceIdentifier('recipient', $mRecipient);
     }
     // Send newsletter and store invalid emails
     try {
         $sPlainTextMethod = Settings::getSetting('newsletter', 'plain_text_alternative_method', 'markdown');
         $oEMail = null;
         if ($sPlainTextMethod === null || $sPlainTextMethod === false) {
             $oEMail = new EMail($this->oNewsletter->getSubject(), $oEmailTemplateInstance, true);
         } else {
             $oEMail = new EMail($this->oNewsletter->getSubject(), MIMEMultipart::alternativeMultipartForTemplate($oEmailTemplateInstance, null, null, $sPlainTextMethod), true);
         }
         if (is_object($mRecipient)) {
             $oEMail->addRecipient($mRecipient->getEmail(), $mRecipient->getName() === $mRecipient->getEmail() ? null : $mRecipient->getName());
         } else {
             $oEMail->addRecipient($mRecipient);
         }
         $oEMail->setSender($this->sSenderName, $this->sSenderEmailAddress);
         $oEMail->send();
     } catch (Exception $e) {
         $this->aInvalidEmails[] = new NewsletterSendFailure($e, $mRecipient);
     }
 }