/** * Send the preview/test email * @param SS_HTTPRequest $request */ public function emailpreview(SS_HTTPRequest $request = null) { $emailVar = $request->getVar('email'); $recipient = new Recipient(Recipient::$test_data); if ($request && !empty($emailVar)) { $recipient->Email = Convert::raw2js($emailVar); } else { $recipient->Email = Member::currentUser()->Email; } $newsletter = $this->record; $email = new NewsletterEmail($newsletter, $recipient, true); $email->send(); return Controller::curr()->redirectBack(); }
public function updateNewsletterEmail(NewsletterEmail $email) { $newsletter = $email->Newsletter(); if ($newsletter->ContentSource != 'page' || !$newsletter->SourcePageID) { return; } $page = $newsletter->SourcePage(); $response = Director::test($page->RelativeLink()); $body = $this->emogrify($response->getBody()); $body = str_replace('xmlns="http://www.w3.org/1999/xhtml"', '', HTTP::absoluteURLs($body)); $re = '/\\.src\\s*=' . str_replace('/', '\\/', Director::absoluteBaseURL()) . '/'; $body = preg_replace($re, '.src =', $body); // undo the fudging that happens to keywords $body = preg_replace('/"[^"]*%7B%24(\\w+)%7D/', '"{\\$$1}', $body); $email->setBody(DBField::create('HTMLText', $body)); }
public static function get_static_base_url() { if (!self::$static_base_url) { global $_FILE_TO_URL_MAPPING; if (!empty($_FILE_TO_URL_MAPPING) && !empty($_FILE_TO_URL_MAPPING[BASE_PATH])) { $baseurl = $_FILE_TO_URL_MAPPING[BASE_PATH]; if (strpos($baseurl, -1) !== "/") { $baseurl .= "/"; } self::$static_base_url = $baseurl; } } return self::$static_base_url; }
function next($count = 10) { $max = $this->current + $count; $max = $max < count($this->objects) ? $max : count($this->objects); while ($this->current < $max) { $index = $this->current++; $member = $this->objects[$index]; // check to see if the user has unsubscribed from the mailing list // TODO Join in the above query first if (defined('DB::USE_ANSI_SQL')) { $unsubscribeRecord = DataObject::get_one('UnsubscribeRecord', "\"MemberID\"='{$member->ID}' AND \"NewsletterTypeID\"='{$this->nlType->ID}'"); } else { $unsubscribeRecord = DataObject::get_one('UnsubscribeRecord', "`MemberID`='{$member->ID}' AND `NewsletterTypeID`='{$this->nlType->ID}'"); } if (!$unsubscribeRecord) { $address = $member->Email; /** * Email Blacklisting Support */ if ($member->BlacklistedEmail && NewsletterEmailBlacklist::isBlocked($address)) { $bounceRecord = new Email_BounceRecord(); $bounceRecord->BounceEmail = $member->Email; $bounceRecord->BounceTime = date("Y-m-d H:i:s", time()); $bounceRecord->BounceMessage = "BlackListed Email"; $bounceRecord->MemberID = $member->ID; $bounceRecord->write(); // Log the blacklist for this specific Newsletter $newsletter = new Newsletter_SentRecipient(); $newsletter->Email = $address; $newsletter->MemberID = $member->ID; $newsletter->Result = 'BlackListed'; $newsletter->ParentID = $this->newsletter->ID; $newsletter->write(); } else { $e = new NewsletterEmail($this->newsletter, $this->nlType); $e->setSubject($this->subject); $e->setFrom($this->from); $e->setTemplate($this->nlType->Template); $nameForEmail = method_exists($member, "getNameForEmail") ? $member->getNameForEmail() : false; $e->populateTemplate(array('Member' => $member, 'FirstName' => $member->FirstName, 'NameForEmail' => $nameForEmail)); $this->sendToAddress($e, $address, $this->messageID, $member); } } } return $this->current >= count($this->objects) ? $this->complete() : parent::next(); }
function render() { if (!($templateName = $this->RenderTemplate)) { $templateName = 'SimpleNewsletterTemplate'; } // Block stylesheets and JS that are not required (email templates should have inline CSS/JS) Requirements::clear(); // Create recipient with some test data $recipient = new Recipient(Recipient::$test_data); $newsletterEmail = new NewsletterEmail($this, $recipient, true); return HTTP::absoluteURLs($newsletterEmail->getData()->renderWith($templateName)); }
/** * Sends a newsletter given by the url */ public function sendnewsletter() { $id = isset($_REQUEST['ID']) ? $_REQUEST['ID'] : $_REQUEST['NewsletterID']; if (!$id) { FormResponse::status_message(_t('NewsletterAdmin.NONLSPECIFIED', 'No newsletter specified'), 'bad'); return FormResponse::respond(); } $newsletter = DataObject::get_by_id("Newsletter", $id); $nlType = $newsletter->getNewsletterType(); $e = new NewsletterEmail($newsletter, $nlType); $e->Subject = $subject = $newsletter->Subject; // TODO Make this dynamic if ($nlType && $nlType->FromEmail) { $e->From = $from = $nlType->FromEmail; } else { $e->From = $from = Email::getAdminEmail(); } if (isset($_REQUEST['TestEmail'])) { $e->To = $_REQUEST['TestEmail']; } $e->setTemplate($nlType->Template); $messageID = base64_encode($newsletter->ID . '_' . date('d-m-Y H:i:s')); switch ($_REQUEST['SendType']) { case "Test": if ($_REQUEST['TestEmail']) { $e->To = $_REQUEST['TestEmail']; $e->setTemplate($nlType->Template); self::sendToAddress($e, $_REQUEST['TestEmail'], $messageID); FormResponse::status_message(_t('NewsletterAdmin.SENTTESTTO', 'Sent test to ') . $_REQUEST['TestEmail'], 'good'); } else { FormResponse::status_message(_t('NewsletterAdmin.PLEASEENTERMAIL', 'Please enter an email address'), 'bad'); } break; case "List": // Send to the entire mailing list. $groupID = $nlType->GroupID; if (defined('DB::USE_ANSI_SQL')) { $members = DataObject::get('Member', "\"GroupID\"='{$groupID}'", null, "INNER JOIN \"Group_Members\" ON \"MemberID\"=\"Member\".\"ID\""); } else { $members = DataObject::get('Member', "`GroupID`='{$groupID}'", null, "INNER JOIN `Group_Members` ON `MemberID`=`Member`.`ID`"); } echo self::sendToList($subject, $from, $newsletter, $nlType, $messageID, $members); break; case "Unsent": // Send to only those who have not already been sent this newsletter. $only_to_unsent = 1; echo self::sendToList($subject, $from, $newsletter, $nlType, $messageID, $newsletter->UnsentSubscribers()); break; } return FormResponse::respond(); }