Mark most SMTP transport errors as soft

[MAILPOET-3171]
This commit is contained in:
Brezo Cordero
2021-09-16 13:09:00 -05:00
committed by Veljko V
parent d0e4ed3892
commit 51a0899698
2 changed files with 25 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\SubscriberError;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Swift_RfcComplianceException;
use MailPoetVendor\Swift_TransportException;
class SMTPMapper {
use BlacklistErrorMapperTrait;
@@ -21,11 +22,17 @@ class SMTPMapper {
public function getErrorFromException(\Exception $e, $subscriber) {
// remove redundant information appended by Swift logger to exception messages
$message = explode(PHP_EOL, $e->getMessage());
$code = $e->getCode();
$level = MailerError::LEVEL_HARD;
if ($e instanceof Swift_RfcComplianceException) {
$level = MailerError::LEVEL_SOFT;
}
if ($e instanceof Swift_TransportException && (($code < 500) || ($code > 504))) {
$level = MailerError::LEVEL_SOFT;
}
$subscriberErrors = [new SubscriberError($subscriber, null)];
return new MailerError(MailerError::OPERATION_SEND, $level, $message[0], null, $subscriberErrors);
}

View File

@@ -42,6 +42,24 @@ class SMTPMapperTest extends \MailPoetUnitTest {
expect($error->getLevel())->equals(MailerError::LEVEL_SOFT);
}
public function testItCreatesSoftErrorForMostTransportExceptions() {
$message = 'Connection could not be established with host localhost [Connection timed out]' . PHP_EOL
. 'Log data:' . PHP_EOL
. '++ Starting Swift_SmtpTransport' . PHP_EOL
. '!! Connection could not be established with host localhost [Connection timed out] (code: 463)';
$error = $this->mapper->getErrorFromException(new Swift_RfcComplianceException($message), 'john@rambo.com');
expect($error->getLevel())->equals(MailerError::LEVEL_SOFT);
}
public function testItCreatesHardErrorForTransportException500to504() {
$message = 'Bad sequence of commands' . PHP_EOL
. 'Log data:' . PHP_EOL
. '++ Starting Swift_SmtpTransport' . PHP_EOL
. '!! Bad sequence of commands (code: 503)';
$error = $this->mapper->getErrorFromException(new Swift_RfcComplianceException($message), 'john@rambo.com');
expect($error->getLevel())->equals(MailerError::LEVEL_SOFT);
}
public function testItCanProcessLogMessageWhenOneExists() {
$log = '++ Swift_SmtpTransport started' . PHP_EOL
. '>> MAIL FROM:<moi@mrcasual.com>' . PHP_EOL