Process Soft error for domain authorization
Pause the task and do not update counts. [MAILPOET-5832]
This commit is contained in:
committed by
Aschepikov
parent
fb406350a5
commit
e7aa261828
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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, [], []);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user