mailer = $mailer; $this->mailerMetaInfo = $mailerMetaInfo; $this->wp = $wp; $this->renderer = $renderer; } public function sendPreview(NewsletterEntity $newsletter, string $emailAddress) { // Renderer and Shortcodes need old Newsletter model, until they're rewritten to use Doctrine $newsletterModel = Newsletter::findOne($newsletter->getId()); if (!$newsletterModel) { throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found"); } $renderedNewsletter = $this->renderer->renderAsPreview($newsletter); $divider = '***MailPoet***'; $dataForShortcodes = array_merge( [$newsletter->getSubject()], $renderedNewsletter ); $body = implode($divider, $dataForShortcodes); $subscriber = Subscriber::getCurrentWPUser() ?: false; $shortcodes = new Shortcodes( $newsletterModel, $subscriber, $queue = false, $wpUserPreview = true ); list( $renderedNewsletter['subject'], $renderedNewsletter['body']['html'], $renderedNewsletter['body']['text'] ) = explode($divider, $shortcodes->replace($body)); $renderedNewsletter['id'] = $newsletter->getId(); $extraParams = [ 'unsubscribe_url' => $this->wp->homeUrl(), 'meta' => $this->mailerMetaInfo->getPreviewMetaInfo(), ]; $result = $this->mailer->send($renderedNewsletter, $emailAddress, $extraParams); if ($result['response'] === false) { $error = sprintf( __('The email could not be sent: %s', 'mailpoet'), $result['error']->getMessage() ); throw new SendPreviewException($error); } } }