Version Description
- 2022-09-29 =
- Fix issue with post notifications in MailPoet 3.99.
Download this release
Release Info
| Developer | MailPoet |
| Plugin | |
| Version | 3.99.1 |
| Comparing to | |
| See all releases | |
Code changes from version 3.99.0 to 3.99.1
- generated/FreeCachedContainer.php +1 -1
- lang/mailpoet.pot +6 -6
- lib/Config/Populator.php +29 -0
- lib/Cron/Workers/Scheduler.php +7 -0
- lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +2 -2
- lib/Newsletter/NewslettersRepository.php +4 -4
- lib/Newsletter/Scheduler/PostNotificationScheduler.php +1 -1
- mailpoet.php +2 -2
- readme.txt +12 -1
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +4 -4
- vendor/composer/installed.php +2 -2
generated/FreeCachedContainer.php
CHANGED
|
@@ -1964,7 +1964,7 @@ class FreeCachedContainer extends Container
|
|
| 1964 |
*/
|
| 1965 |
protected function getSchedulerService()
|
| 1966 |
{
|
| 1967 |
-
return $this->services['MailPoet\\Cron\\Workers\\Scheduler'] = new \MailPoet\Cron\Workers\Scheduler(($this->services['MailPoet\\Segments\\SubscribersFinder'] ?? $this->getSubscribersFinderService()), ($this->privates['MailPoet\\Logging\\LoggerFactory'] ?? $this->getLoggerFactoryService()), ($this->services['MailPoet\\Cron\\CronHelper'] ?? $this->getCronHelperService()), ($this->services['MailPoet\\Cron\\CronWorkerScheduler'] ?? $this->getCronWorkerSchedulerService()), ($this->services['MailPoet\\Newsletter\\Sending\\ScheduledTasksRepository'] ?? $this->getScheduledTasksRepositoryService()), ($this->services['MailPoet\\Newsletter\\NewslettersRepository'] ?? $this->getNewslettersRepositoryService()), ($this->services['MailPoet\\Segments\\SegmentsRepository'] ?? $this->getSegmentsRepositoryService()), ($this->services['MailPoet\\Newsletter\\Segment\\NewsletterSegmentRepository'] ?? $this->getNewsletterSegmentRepositoryService()), ($this->services['MailPoet\\WP\\Functions'] ?? ($this->services['MailPoet\\WP\\Functions'] = new \MailPoet\WP\Functions())), ($this->privates['MailPoet\\Util\\Security'] ?? $this->getSecurityService()), ($this->services['MailPoet\\Newsletter\\Scheduler\\Scheduler'] ?? $this->getScheduler2Service()));
|
| 1968 |
}
|
| 1969 |
|
| 1970 |
/**
|
| 1964 |
*/
|
| 1965 |
protected function getSchedulerService()
|
| 1966 |
{
|
| 1967 |
+
return $this->services['MailPoet\\Cron\\Workers\\Scheduler'] = new \MailPoet\Cron\Workers\Scheduler(($this->services['MailPoet\\Segments\\SubscribersFinder'] ?? $this->getSubscribersFinderService()), ($this->privates['MailPoet\\Logging\\LoggerFactory'] ?? $this->getLoggerFactoryService()), ($this->services['MailPoet\\Cron\\CronHelper'] ?? $this->getCronHelperService()), ($this->services['MailPoet\\Cron\\CronWorkerScheduler'] ?? $this->getCronWorkerSchedulerService()), ($this->services['MailPoet\\Newsletter\\Sending\\ScheduledTasksRepository'] ?? $this->getScheduledTasksRepositoryService()), ($this->services['MailPoet\\Newsletter\\NewslettersRepository'] ?? $this->getNewslettersRepositoryService()), ($this->services['MailPoet\\Segments\\SegmentsRepository'] ?? $this->getSegmentsRepositoryService()), ($this->services['MailPoet\\Newsletter\\Segment\\NewsletterSegmentRepository'] ?? $this->getNewsletterSegmentRepositoryService()), ($this->services['MailPoet\\Newsletter\\Sending\\SendingQueuesRepository'] ?? $this->getSendingQueuesRepositoryService()), ($this->services['MailPoet\\WP\\Functions'] ?? ($this->services['MailPoet\\WP\\Functions'] = new \MailPoet\WP\Functions())), ($this->privates['MailPoet\\Util\\Security'] ?? $this->getSecurityService()), ($this->services['MailPoet\\Newsletter\\Scheduler\\Scheduler'] ?? $this->getScheduler2Service()));
|
| 1968 |
}
|
| 1969 |
|
| 1970 |
/**
|
lang/mailpoet.pot
CHANGED
|
@@ -2,9 +2,9 @@
|
|
| 2 |
# This file is distributed under the same license as the MailPoet package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: MailPoet 3.99.
|
| 6 |
"Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
|
| 7 |
-
"POT-Creation-Date: 2022-09-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=utf-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
|
@@ -1195,21 +1195,21 @@ msgstr ""
|
|
| 1195 |
msgid "We noticed that you're using an unsupported environment. While MailPoet might work within a MultiSite environment, we don’t support it."
|
| 1196 |
msgstr ""
|
| 1197 |
|
| 1198 |
-
#: lib/Config/Populator.php:
|
| 1199 |
msgctxt "default email opt-in message displayed on checkout page for ecommerce websites"
|
| 1200 |
msgid "Yes, I would like to be added to your mailing list"
|
| 1201 |
msgstr ""
|
| 1202 |
|
| 1203 |
-
#: lib/Config/Populator.php:
|
| 1204 |
msgctxt "default email opt-in message displayed on checkout page for ecommerce websites"
|
| 1205 |
msgid "I would like to receive exclusive emails with discounts and product information"
|
| 1206 |
msgstr ""
|
| 1207 |
|
| 1208 |
-
#: lib/Config/Populator.php:
|
| 1209 |
msgid "Newsletter mailing list"
|
| 1210 |
msgstr ""
|
| 1211 |
|
| 1212 |
-
#: lib/Config/Populator.php:
|
| 1213 |
msgid "This list is automatically created when you install MailPoet."
|
| 1214 |
msgstr ""
|
| 1215 |
|
| 2 |
# This file is distributed under the same license as the MailPoet package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: MailPoet 3.99.1\n"
|
| 6 |
"Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
|
| 7 |
+
"POT-Creation-Date: 2022-09-29 19:46:36+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=utf-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 1195 |
msgid "We noticed that you're using an unsupported environment. While MailPoet might work within a MultiSite environment, we don’t support it."
|
| 1196 |
msgstr ""
|
| 1197 |
|
| 1198 |
+
#: lib/Config/Populator.php:317
|
| 1199 |
msgctxt "default email opt-in message displayed on checkout page for ecommerce websites"
|
| 1200 |
msgid "Yes, I would like to be added to your mailing list"
|
| 1201 |
msgstr ""
|
| 1202 |
|
| 1203 |
+
#: lib/Config/Populator.php:318
|
| 1204 |
msgctxt "default email opt-in message displayed on checkout page for ecommerce websites"
|
| 1205 |
msgid "I would like to receive exclusive emails with discounts and product information"
|
| 1206 |
msgstr ""
|
| 1207 |
|
| 1208 |
+
#: lib/Config/Populator.php:385
|
| 1209 |
msgid "Newsletter mailing list"
|
| 1210 |
msgstr ""
|
| 1211 |
|
| 1212 |
+
#: lib/Config/Populator.php:387
|
| 1213 |
msgid "This list is automatically created when you install MailPoet."
|
| 1214 |
msgstr ""
|
| 1215 |
|
lib/Config/Populator.php
CHANGED
|
@@ -203,6 +203,7 @@ class Populator {
|
|
| 203 |
$this->moveNewsletterTemplatesThumbnailData();
|
| 204 |
$this->scheduleNewsletterTemplateThumbnails();
|
| 205 |
$this->updateToUnifiedTrackingSettings();
|
|
|
|
| 206 |
}
|
| 207 |
|
| 208 |
private function createMailPoetPage() {
|
|
@@ -985,4 +986,32 @@ class Populator {
|
|
| 985 |
}
|
| 986 |
$this->settings->set('tracking.level', $trackingLevel);
|
| 987 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 988 |
}
|
| 203 |
$this->moveNewsletterTemplatesThumbnailData();
|
| 204 |
$this->scheduleNewsletterTemplateThumbnails();
|
| 205 |
$this->updateToUnifiedTrackingSettings();
|
| 206 |
+
$this->fixNotificationHistoryRecordsStuckAtSending();
|
| 207 |
}
|
| 208 |
|
| 209 |
private function createMailPoetPage() {
|
| 986 |
}
|
| 987 |
$this->settings->set('tracking.level', $trackingLevel);
|
| 988 |
}
|
| 989 |
+
|
| 990 |
+
private function fixNotificationHistoryRecordsStuckAtSending() {
|
| 991 |
+
// perform once for versions below or equal to 3.99.0
|
| 992 |
+
if (version_compare((string)$this->settings->get('db_version', '3.99.1'), '3.99.0', '>')) {
|
| 993 |
+
return false;
|
| 994 |
+
}
|
| 995 |
+
|
| 996 |
+
$newsletters = $this->entityManager->getClassMetadata(NewsletterEntity::class)->getTableName();
|
| 997 |
+
$queues = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
|
| 998 |
+
$tasks = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName();
|
| 999 |
+
|
| 1000 |
+
$this->entityManager->getConnection()->executeStatement("
|
| 1001 |
+
UPDATE {$newsletters} n
|
| 1002 |
+
JOIN {$queues} q ON n.id = q.newsletter_id
|
| 1003 |
+
JOIN {$tasks} t ON q.task_id = t.id
|
| 1004 |
+
SET n.status = :sentStatus
|
| 1005 |
+
WHERE n.type = :type
|
| 1006 |
+
AND n.status = :sendingStatus
|
| 1007 |
+
AND t.status = :taskStatus
|
| 1008 |
+
", [
|
| 1009 |
+
'type' => NewsletterEntity::TYPE_NOTIFICATION_HISTORY,
|
| 1010 |
+
'sendingStatus' => NewsletterEntity::STATUS_SENDING,
|
| 1011 |
+
'sentStatus' => NewsletterEntity::STATUS_SENT,
|
| 1012 |
+
'taskStatus' => ScheduledTaskEntity::STATUS_COMPLETED,
|
| 1013 |
+
]);
|
| 1014 |
+
|
| 1015 |
+
return true;
|
| 1016 |
+
}
|
| 1017 |
}
|
lib/Cron/Workers/Scheduler.php
CHANGED
|
@@ -23,6 +23,7 @@ use MailPoet\Newsletter\Scheduler\Scheduler as NewsletterScheduler;
|
|
| 23 |
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
| 24 |
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
|
| 25 |
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
|
|
|
| 26 |
use MailPoet\Segments\SegmentsRepository;
|
| 27 |
use MailPoet\Segments\SubscribersFinder;
|
| 28 |
use MailPoet\Tasks\Sending as SendingTask;
|
|
@@ -57,6 +58,9 @@ class Scheduler {
|
|
| 57 |
/** @var NewsletterSegmentRepository */
|
| 58 |
private $newsletterSegmentRepository;
|
| 59 |
|
|
|
|
|
|
|
|
|
|
| 60 |
/** @var WPFunctions */
|
| 61 |
private $wp;
|
| 62 |
|
|
@@ -75,6 +79,7 @@ class Scheduler {
|
|
| 75 |
NewslettersRepository $newslettersRepository,
|
| 76 |
SegmentsRepository $segmentsRepository,
|
| 77 |
NewsletterSegmentRepository $newsletterSegmentRepository,
|
|
|
|
| 78 |
WPFunctions $wp,
|
| 79 |
Security $security,
|
| 80 |
NewsletterScheduler $scheduler
|
|
@@ -87,6 +92,7 @@ class Scheduler {
|
|
| 87 |
$this->newslettersRepository = $newslettersRepository;
|
| 88 |
$this->segmentsRepository = $segmentsRepository;
|
| 89 |
$this->newsletterSegmentRepository = $newsletterSegmentRepository;
|
|
|
|
| 90 |
$this->wp = $wp;
|
| 91 |
$this->security = $security;
|
| 92 |
$this->scheduler = $scheduler;
|
|
@@ -214,6 +220,7 @@ class Scheduler {
|
|
| 214 |
|
| 215 |
// Because there is mixed usage of the old and new model, we want to be sure about the correct state
|
| 216 |
$this->newslettersRepository->refresh($notificationHistory);
|
|
|
|
| 217 |
|
| 218 |
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->info(
|
| 219 |
'post notification set status to sending',
|
| 23 |
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
| 24 |
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
|
| 25 |
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
| 26 |
+
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
| 27 |
use MailPoet\Segments\SegmentsRepository;
|
| 28 |
use MailPoet\Segments\SubscribersFinder;
|
| 29 |
use MailPoet\Tasks\Sending as SendingTask;
|
| 58 |
/** @var NewsletterSegmentRepository */
|
| 59 |
private $newsletterSegmentRepository;
|
| 60 |
|
| 61 |
+
/** @var SendingQueuesRepository */
|
| 62 |
+
private $sendingQueuesRepository;
|
| 63 |
+
|
| 64 |
/** @var WPFunctions */
|
| 65 |
private $wp;
|
| 66 |
|
| 79 |
NewslettersRepository $newslettersRepository,
|
| 80 |
SegmentsRepository $segmentsRepository,
|
| 81 |
NewsletterSegmentRepository $newsletterSegmentRepository,
|
| 82 |
+
SendingQueuesRepository $sendingQueuesRepository,
|
| 83 |
WPFunctions $wp,
|
| 84 |
Security $security,
|
| 85 |
NewsletterScheduler $scheduler
|
| 92 |
$this->newslettersRepository = $newslettersRepository;
|
| 93 |
$this->segmentsRepository = $segmentsRepository;
|
| 94 |
$this->newsletterSegmentRepository = $newsletterSegmentRepository;
|
| 95 |
+
$this->sendingQueuesRepository = $sendingQueuesRepository;
|
| 96 |
$this->wp = $wp;
|
| 97 |
$this->security = $security;
|
| 98 |
$this->scheduler = $scheduler;
|
| 220 |
|
| 221 |
// Because there is mixed usage of the old and new model, we want to be sure about the correct state
|
| 222 |
$this->newslettersRepository->refresh($notificationHistory);
|
| 223 |
+
$this->sendingQueuesRepository->refresh($queue->getSendingQueueEntity());
|
| 224 |
|
| 225 |
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->info(
|
| 226 |
'post notification set status to sending',
|
lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
CHANGED
|
@@ -253,9 +253,9 @@ class Newsletter {
|
|
| 253 |
$newsletter->getType() === NewsletterEntity::TYPE_STANDARD ||
|
| 254 |
$newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION_HISTORY
|
| 255 |
) {
|
| 256 |
-
$
|
| 257 |
$newsletter->setStatus(NewsletterEntity::STATUS_SENT);
|
| 258 |
-
$newsletter->setSentAt(new Carbon($
|
| 259 |
$this->newslettersRepository->persist($newsletter);
|
| 260 |
$this->newslettersRepository->flush();
|
| 261 |
}
|
| 253 |
$newsletter->getType() === NewsletterEntity::TYPE_STANDARD ||
|
| 254 |
$newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION_HISTORY
|
| 255 |
) {
|
| 256 |
+
$scheduledTask = $sendingTask->task();
|
| 257 |
$newsletter->setStatus(NewsletterEntity::STATUS_SENT);
|
| 258 |
+
$newsletter->setSentAt(new Carbon($scheduledTask->processedAt));
|
| 259 |
$this->newslettersRepository->persist($newsletter);
|
| 260 |
$this->newslettersRepository->flush();
|
| 261 |
}
|
lib/Newsletter/NewslettersRepository.php
CHANGED
|
@@ -407,8 +407,8 @@ class NewslettersRepository extends Repository {
|
|
| 407 |
/**
|
| 408 |
* @return NewsletterEntity[]
|
| 409 |
*/
|
| 410 |
-
public function
|
| 411 |
-
|
| 412 |
->select('n')
|
| 413 |
->from(NewsletterEntity::class, 'n')
|
| 414 |
->join('n.queues', 'q')
|
|
@@ -416,13 +416,13 @@ class NewslettersRepository extends Repository {
|
|
| 416 |
->where('n.parent = :parent')
|
| 417 |
->andWhere('n.type = :type')
|
| 418 |
->andWhere('n.status = :status')
|
|
|
|
| 419 |
->andWhere('t.status != :taskStatus')
|
| 420 |
->setParameter('parent', $newsletter)
|
| 421 |
->setParameter('type', NewsletterEntity::TYPE_NOTIFICATION_HISTORY)
|
| 422 |
->setParameter('status', NewsletterEntity::STATUS_SENDING)
|
| 423 |
->setParameter('taskStatus', ScheduledTaskEntity::STATUS_PAUSED)
|
| 424 |
-
->getQuery()->
|
| 425 |
-
return $result;
|
| 426 |
}
|
| 427 |
|
| 428 |
/**
|
| 407 |
/**
|
| 408 |
* @return NewsletterEntity[]
|
| 409 |
*/
|
| 410 |
+
public function findSendingNotificationHistoryWithoutPausedTask(NewsletterEntity $newsletter): array {
|
| 411 |
+
return $this->entityManager->createQueryBuilder()
|
| 412 |
->select('n')
|
| 413 |
->from(NewsletterEntity::class, 'n')
|
| 414 |
->join('n.queues', 'q')
|
| 416 |
->where('n.parent = :parent')
|
| 417 |
->andWhere('n.type = :type')
|
| 418 |
->andWhere('n.status = :status')
|
| 419 |
+
->andWhere('n.deletedAt IS NULL')
|
| 420 |
->andWhere('t.status != :taskStatus')
|
| 421 |
->setParameter('parent', $newsletter)
|
| 422 |
->setParameter('type', NewsletterEntity::TYPE_NOTIFICATION_HISTORY)
|
| 423 |
->setParameter('status', NewsletterEntity::STATUS_SENDING)
|
| 424 |
->setParameter('taskStatus', ScheduledTaskEntity::STATUS_PAUSED)
|
| 425 |
+
->getQuery()->getResult();
|
|
|
|
| 426 |
}
|
| 427 |
|
| 428 |
/**
|
lib/Newsletter/Scheduler/PostNotificationScheduler.php
CHANGED
|
@@ -113,7 +113,7 @@ class PostNotificationScheduler {
|
|
| 113 |
}
|
| 114 |
|
| 115 |
public function createPostNotificationSendingTask(NewsletterEntity $newsletter): ?ScheduledTaskEntity {
|
| 116 |
-
$notificationHistory = $this->newslettersRepository->
|
| 117 |
if (count($notificationHistory) > 0) {
|
| 118 |
return null;
|
| 119 |
}
|
| 113 |
}
|
| 114 |
|
| 115 |
public function createPostNotificationSendingTask(NewsletterEntity $newsletter): ?ScheduledTaskEntity {
|
| 116 |
+
$notificationHistory = $this->newslettersRepository->findSendingNotificationHistoryWithoutPausedTask($newsletter);
|
| 117 |
if (count($notificationHistory) > 0) {
|
| 118 |
return null;
|
| 119 |
}
|
mailpoet.php
CHANGED
|
@@ -5,7 +5,7 @@ if (!defined('ABSPATH')) exit;
|
|
| 5 |
|
| 6 |
/*
|
| 7 |
* Plugin Name: MailPoet
|
| 8 |
-
* Version: 3.99.
|
| 9 |
* Plugin URI: http://www.mailpoet.com
|
| 10 |
* Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
|
| 11 |
* Author: MailPoet
|
|
@@ -20,7 +20,7 @@ if (!defined('ABSPATH')) exit;
|
|
| 20 |
*/
|
| 21 |
|
| 22 |
$mailpoetPlugin = [
|
| 23 |
-
'version' => '3.99.
|
| 24 |
'filename' => __FILE__,
|
| 25 |
'path' => dirname(__FILE__),
|
| 26 |
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
|
| 5 |
|
| 6 |
/*
|
| 7 |
* Plugin Name: MailPoet
|
| 8 |
+
* Version: 3.99.1
|
| 9 |
* Plugin URI: http://www.mailpoet.com
|
| 10 |
* Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
|
| 11 |
* Author: MailPoet
|
| 20 |
*/
|
| 21 |
|
| 22 |
$mailpoetPlugin = [
|
| 23 |
+
'version' => '3.99.1',
|
| 24 |
'filename' => __FILE__,
|
| 25 |
'path' => dirname(__FILE__),
|
| 26 |
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
|
readme.txt
CHANGED
|
@@ -3,7 +3,7 @@ Contributors: mailpoet
|
|
| 3 |
Tags: email, email marketing, post notification, woocommerce emails, email automation, newsletter, newsletter builder, newsletter subscribers
|
| 4 |
Requires at least: 5.6
|
| 5 |
Tested up to: 6.0
|
| 6 |
-
Stable tag: 3.99.
|
| 7 |
Requires PHP: 7.2
|
| 8 |
License: GPLv3
|
| 9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
|
@@ -12,6 +12,14 @@ Send beautiful newsletters from WordPress. Collect subscribers with signup forms
|
|
| 12 |
|
| 13 |
== Description ==
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
Use MailPoet to create, send, manage, and grow your email marketing campaigns – all without leaving your WordPress dashboard.
|
| 16 |
|
| 17 |
Our newsletter builder integrates perfectly with WordPress so any website owner can create beautiful emails from scratch, or by using our responsive templates that display flawlessly across all devices.
|
|
@@ -219,6 +227,9 @@ Check our [Knowledge Base](https://kb.mailpoet.com) or contact us through our [s
|
|
| 219 |
|
| 220 |
== Changelog ==
|
| 221 |
|
|
|
|
|
|
|
|
|
|
| 222 |
= 3.99.0 - 2022-09-27 =
|
| 223 |
* Added: any email address from a sender domain is automatically allowed for sending (MailPoet Sending Service only);
|
| 224 |
* Fixed: some post notifications may fail to send.
|
| 3 |
Tags: email, email marketing, post notification, woocommerce emails, email automation, newsletter, newsletter builder, newsletter subscribers
|
| 4 |
Requires at least: 5.6
|
| 5 |
Tested up to: 6.0
|
| 6 |
+
Stable tag: 3.99.1
|
| 7 |
Requires PHP: 7.2
|
| 8 |
License: GPLv3
|
| 9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
| 12 |
|
| 13 |
== Description ==
|
| 14 |
|
| 15 |
+
= Get ready for Black Friday with 40% off MailPoet plans =
|
| 16 |
+
|
| 17 |
+
Save 40% on all annual plans until 2 pm UTC, October 7. Terms & conditions apply.
|
| 18 |
+
|
| 19 |
+
[Shop Now](https://account.mailpoet.com/?billing=yearly&ref=sale-october-2022-wporg&utm_source=WP&utm_medium=repotext&utm_campaign=mp_prebfcm)
|
| 20 |
+
|
| 21 |
+
= What is MailPoet? =
|
| 22 |
+
|
| 23 |
Use MailPoet to create, send, manage, and grow your email marketing campaigns – all without leaving your WordPress dashboard.
|
| 24 |
|
| 25 |
Our newsletter builder integrates perfectly with WordPress so any website owner can create beautiful emails from scratch, or by using our responsive templates that display flawlessly across all devices.
|
| 227 |
|
| 228 |
== Changelog ==
|
| 229 |
|
| 230 |
+
= 3.99.1 - 2022-09-29 =
|
| 231 |
+
* Fix issue with post notifications in MailPoet 3.99.
|
| 232 |
+
|
| 233 |
= 3.99.0 - 2022-09-27 =
|
| 234 |
* Added: any email address from a sender domain is automatically allowed for sending (MailPoet Sending Service only);
|
| 235 |
* Fixed: some post notifications may fail to send.
|
vendor/autoload.php
CHANGED
|
@@ -6,4 +6,4 @@ if (PHP_VERSION_ID < 50600) {
|
|
| 6 |
exit(1);
|
| 7 |
}
|
| 8 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 9 |
-
return
|
| 6 |
exit(1);
|
| 7 |
}
|
| 8 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 9 |
+
return ComposerAutoloaderInita4fc8bb78d1db814ba5bbcb425e458bb::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?php
|
| 2 |
if (!defined('ABSPATH')) exit;
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
-
class
|
| 5 |
{
|
| 6 |
private static $loader;
|
| 7 |
public static function loadClassLoader($class)
|
|
@@ -16,20 +16,20 @@ class ComposerAutoloaderInitf138e75d928431e82fa7134ac11bf7dd
|
|
| 16 |
return self::$loader;
|
| 17 |
}
|
| 18 |
require __DIR__ . '/platform_check.php';
|
| 19 |
-
spl_autoload_register(array('
|
| 20 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
| 21 |
-
spl_autoload_unregister(array('
|
| 22 |
require __DIR__ . '/autoload_static.php';
|
| 23 |
-
call_user_func(\Composer\Autoload\
|
| 24 |
$loader->register(true);
|
| 25 |
-
$includeFiles = \Composer\Autoload\
|
| 26 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
| 27 |
-
|
| 28 |
}
|
| 29 |
return $loader;
|
| 30 |
}
|
| 31 |
}
|
| 32 |
-
function
|
| 33 |
{
|
| 34 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
| 35 |
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
| 1 |
<?php
|
| 2 |
if (!defined('ABSPATH')) exit;
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
+
class ComposerAutoloaderInita4fc8bb78d1db814ba5bbcb425e458bb
|
| 5 |
{
|
| 6 |
private static $loader;
|
| 7 |
public static function loadClassLoader($class)
|
| 16 |
return self::$loader;
|
| 17 |
}
|
| 18 |
require __DIR__ . '/platform_check.php';
|
| 19 |
+
spl_autoload_register(array('ComposerAutoloaderInita4fc8bb78d1db814ba5bbcb425e458bb', 'loadClassLoader'), true, true);
|
| 20 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
| 21 |
+
spl_autoload_unregister(array('ComposerAutoloaderInita4fc8bb78d1db814ba5bbcb425e458bb', 'loadClassLoader'));
|
| 22 |
require __DIR__ . '/autoload_static.php';
|
| 23 |
+
call_user_func(\Composer\Autoload\ComposerStaticInita4fc8bb78d1db814ba5bbcb425e458bb::getInitializer($loader));
|
| 24 |
$loader->register(true);
|
| 25 |
+
$includeFiles = \Composer\Autoload\ComposerStaticInita4fc8bb78d1db814ba5bbcb425e458bb::$files;
|
| 26 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
| 27 |
+
composerRequirea4fc8bb78d1db814ba5bbcb425e458bb($fileIdentifier, $file);
|
| 28 |
}
|
| 29 |
return $loader;
|
| 30 |
}
|
| 31 |
}
|
| 32 |
+
function composerRequirea4fc8bb78d1db814ba5bbcb425e458bb($fileIdentifier, $file)
|
| 33 |
{
|
| 34 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
| 35 |
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
vendor/composer/autoload_static.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
// autoload_static.php @generated by Composer
|
| 3 |
namespace Composer\Autoload;
|
| 4 |
if (!defined('ABSPATH')) exit;
|
| 5 |
-
class
|
| 6 |
{
|
| 7 |
public static $files = array (
|
| 8 |
'e65c52a9094ad098d9369d5cad5421fa' => __DIR__ . '/../..' . '/lib/exceptions.php',
|
|
@@ -1371,9 +1371,9 @@ class ComposerStaticInitf138e75d928431e82fa7134ac11bf7dd
|
|
| 1371 |
public static function getInitializer(ClassLoader $loader)
|
| 1372 |
{
|
| 1373 |
return \Closure::bind(function () use ($loader) {
|
| 1374 |
-
$loader->prefixLengthsPsr4 =
|
| 1375 |
-
$loader->prefixDirsPsr4 =
|
| 1376 |
-
$loader->classMap =
|
| 1377 |
}, null, ClassLoader::class);
|
| 1378 |
}
|
| 1379 |
}
|
| 2 |
// autoload_static.php @generated by Composer
|
| 3 |
namespace Composer\Autoload;
|
| 4 |
if (!defined('ABSPATH')) exit;
|
| 5 |
+
class ComposerStaticInita4fc8bb78d1db814ba5bbcb425e458bb
|
| 6 |
{
|
| 7 |
public static $files = array (
|
| 8 |
'e65c52a9094ad098d9369d5cad5421fa' => __DIR__ . '/../..' . '/lib/exceptions.php',
|
| 1371 |
public static function getInitializer(ClassLoader $loader)
|
| 1372 |
{
|
| 1373 |
return \Closure::bind(function () use ($loader) {
|
| 1374 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInita4fc8bb78d1db814ba5bbcb425e458bb::$prefixLengthsPsr4;
|
| 1375 |
+
$loader->prefixDirsPsr4 = ComposerStaticInita4fc8bb78d1db814ba5bbcb425e458bb::$prefixDirsPsr4;
|
| 1376 |
+
$loader->classMap = ComposerStaticInita4fc8bb78d1db814ba5bbcb425e458bb::$classMap;
|
| 1377 |
}, null, ClassLoader::class);
|
| 1378 |
}
|
| 1379 |
}
|
vendor/composer/installed.php
CHANGED
|
@@ -7,7 +7,7 @@ if (!defined('ABSPATH')) exit;
|
|
| 7 |
'type' => 'library',
|
| 8 |
'install_path' => __DIR__ . '/../../',
|
| 9 |
'aliases' => array(),
|
| 10 |
-
'reference' => '
|
| 11 |
'name' => '__root__',
|
| 12 |
'dev' => false,
|
| 13 |
),
|
|
@@ -18,7 +18,7 @@ if (!defined('ABSPATH')) exit;
|
|
| 18 |
'type' => 'library',
|
| 19 |
'install_path' => __DIR__ . '/../../',
|
| 20 |
'aliases' => array(),
|
| 21 |
-
'reference' => '
|
| 22 |
'dev_requirement' => false,
|
| 23 |
),
|
| 24 |
'mtdowling/cron-expression' => array(
|
| 7 |
'type' => 'library',
|
| 8 |
'install_path' => __DIR__ . '/../../',
|
| 9 |
'aliases' => array(),
|
| 10 |
+
'reference' => '1ee452c37a5c1523ea144327587cdda0439cf29b',
|
| 11 |
'name' => '__root__',
|
| 12 |
'dev' => false,
|
| 13 |
),
|
| 18 |
'type' => 'library',
|
| 19 |
'install_path' => __DIR__ . '/../../',
|
| 20 |
'aliases' => array(),
|
| 21 |
+
'reference' => '1ee452c37a5c1523ea144327587cdda0439cf29b',
|
| 22 |
'dev_requirement' => false,
|
| 23 |
),
|
| 24 |
'mtdowling/cron-expression' => array(
|
