Process Soft error for domain authorization

Pause the task and do not update counts.

[MAILPOET-5832]
This commit is contained in:
Brezo Cordero
2024-01-18 16:29:01 -06:00
committed by Aschepikov
parent fb406350a5
commit e7aa261828
3 changed files with 53 additions and 1 deletions

View File

@@ -4,6 +4,7 @@ namespace MailPoet\Cron\Workers\SendingQueue;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\MailerLog;
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
@@ -19,14 +20,19 @@ class SendingErrorHandler {
/** @var SendingQueuesRepository */
private $sendingQueuesRepository;
/** @var LoggerFactory */
private $loggerFactory;
public function __construct(
ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository,
SendingThrottlingHandler $throttlingHandler,
SendingQueuesRepository $sendingQueuesRepository
SendingQueuesRepository $sendingQueuesRepository,
LoggerFactory $loggerFactory
) {
$this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository;
$this->throttlingHandler = $throttlingHandler;
$this->sendingQueuesRepository = $sendingQueuesRepository;
$this->loggerFactory = $loggerFactory;
}
public function processError(
@@ -63,6 +69,14 @@ class SendingErrorHandler {
$queue = $task->getSendingQueue();
if ($queue instanceof SendingQueueEntity) {
if ($error->getOperation() === MailerError::OPERATION_DOMAIN_AUTHORIZATION) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info(
'Paused task in sending queue due to sender domain authorization error',
['task_id' => $task->getId()]
);
$this->sendingQueuesRepository->pause($queue);
return;
}
$this->sendingQueuesRepository->updateCounts($queue);
}
}

View File

@@ -307,6 +307,11 @@ class SendingQueue {
// reschedule bounce task to run sooner, if needed
$this->reScheduleBounceTask();
// Check task has not been paused before continue processing
if ($task->getStatus() === ScheduledTaskEntity::STATUS_PAUSED) {
return;
}
if ($newsletter->getStatus() !== NewsletterEntity::STATUS_CORRUPT) {
$this->processQueue(
$task,

View File

@@ -6,9 +6,13 @@ use Codeception\Stub;
use Codeception\Stub\Expected;
use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\SubscriberError;
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoetVendor\Monolog\Logger;
class SendingErrorHandlerTest extends \MailPoetTest {
public function testItShouldProcessSoftErrorCorrectly() {
@@ -52,4 +56,33 @@ class SendingErrorHandlerTest extends \MailPoetTest {
);
$errorHandler->processError($error, new ScheduledTaskEntity(), $subscriberIds, $subscribers);
}
public function testItShouldProcessSoftErrorForDomainAuthorizationCorrectly() {
$error = new MailerError(
MailerError::OPERATION_DOMAIN_AUTHORIZATION,
MailerError::LEVEL_SOFT,
'Email violates Sender Domain requirements. Please authenticate the sender domain.',
null,
[]
);
$sendingQueuesRepository = Stub::make(
SendingQueuesRepository::class,
['pause' => Expected::once()],
);
$errorHandler = $this->getServiceWithOverrides(
SendingErrorHandler::class, [
'sendingQueuesRepository' => $sendingQueuesRepository,
'loggerFactory' => Stub::makeEmpty(
LoggerFactory::class,
['getLogger' => Stub::makeEmpty(Logger::class, ['info' => Expected::once()])]
),
]
);
$sendingQueue = new SendingQueueEntity();
$taskEntity = Stub::make(ScheduledTaskEntity::class, ['getSendingQueue' => $sendingQueue]);
$errorHandler->processError($error, $taskEntity, [], []);
}
}