Mark most SMTP transport errors as soft
[MAILPOET-3171]
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user