mailer = $mailer; } if ($wp) { $this->wp = $wp; } else { $this->wp = new WPFunctions; } $this->settings = new SettingsController(); } function sendConfirmationEmail(Subscriber $subscriber) { $signup_confirmation = $this->settings->get('signup_confirmation'); if ((bool)$signup_confirmation['enabled'] === false) { return false; } $subscriber->count_confirmations++; $subscriber->save(); if (!$this->wp->isUserLoggedIn() && $subscriber->count_confirmations > self::MAX_CONFIRMATION_EMAILS) { return false; } $authorization_emails_validation = $this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING); $unauthorized_confirmation_email = isset($authorization_emails_validation['invalid_confirmation_address']); if (Bridge::isMPSendingServiceEnabled() && $unauthorized_confirmation_email) { return false; } $segments = $subscriber->segments()->findMany(); $segment_names = array_map(function($segment) { return $segment->name; }, $segments); $body = nl2br($signup_confirmation['body']); // replace list of segments shortcode $body = str_replace( '[lists_to_confirm]', '' . join(', ', $segment_names) . '', $body ); // replace activation link $body = Helpers::replaceLinkTags( $body, Url::getConfirmationUrl($subscriber), ['target' => '_blank'], 'activation_link' ); //create a text version. @ is important here, Html2Text throws warnings $text = @Html2Text::convert((mb_detect_encoding($body, 'UTF-8', true)) ? $body : utf8_encode($body)); // build email data $email = [ 'subject' => $signup_confirmation['subject'], 'body' => [ 'html' => $body, 'text' => $text, ], ]; // set from $from = ( !empty($signup_confirmation['from']) && !empty($signup_confirmation['from']['address']) ) ? $signup_confirmation['from'] : false; // set reply to $reply_to = ( !empty($signup_confirmation['reply_to']) && !empty($signup_confirmation['reply_to']['address']) ) ? $signup_confirmation['reply_to'] : false; // send email try { if (!$this->mailer) { $this->mailer = new Mailer(); } $this->mailer->init(false, $from, $reply_to); $result = $this->mailer->send($email, $subscriber); if ($result['response'] === false) { $subscriber->setError(__('Something went wrong with your subscription. Please contact the website owner.', 'mailpoet')); return false; }; return true; } catch (\Exception $e) { $subscriber->setError(__('Something went wrong with your subscription. Please contact the website owner.', 'mailpoet')); return false; } } }