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); } }