Add soft level errors distinction for PHPMail method
[MAILPOET-1154]
This commit is contained in:
@ -8,8 +8,16 @@ use MailPoet\Mailer\SubscriberError;
|
|||||||
class PHPMailMapper {
|
class PHPMailMapper {
|
||||||
use ConnectionErrorMapperTrait;
|
use ConnectionErrorMapperTrait;
|
||||||
|
|
||||||
function getErrorFromException(\Exception $e) {
|
function getErrorFromException(\Exception $e, $subscriber, $extra_params) {
|
||||||
return new MailerError(MailerError::OPERATION_SEND, MailerError::LEVEL_HARD, $e->getMessage());
|
$level = MailerError::LEVEL_HARD;
|
||||||
|
if(strpos($e->getMessage(), 'Invalid address') === 0) {
|
||||||
|
$level = MailerError::LEVEL_SOFT;
|
||||||
|
}
|
||||||
|
$subscriber_errors = [];
|
||||||
|
if(empty($extra_params['test_email'])) {
|
||||||
|
$subscriber_errors[] = new SubscriberError($subscriber, null);
|
||||||
|
}
|
||||||
|
return new MailerError(MailerError::OPERATION_SEND, $level, $e->getMessage(), null, $subscriber_errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getErrorForSubscriber($subscriber, $extra_params) {
|
function getErrorForSubscriber($subscriber, $extra_params) {
|
||||||
|
@ -33,7 +33,7 @@ class PHPMail {
|
|||||||
$mailer = $this->configureMailerWithMessage($newsletter, $subscriber, $extra_params);
|
$mailer = $this->configureMailerWithMessage($newsletter, $subscriber, $extra_params);
|
||||||
$result = $mailer->send();
|
$result = $mailer->send();
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
return Mailer::formatMailerErrorResult($this->error_mapper->getErrorFromException($e));
|
return Mailer::formatMailerErrorResult($this->error_mapper->getErrorFromException($e, $subscriber, $extra_params));
|
||||||
}
|
}
|
||||||
if($result === true) {
|
if($result === true) {
|
||||||
return Mailer::formatMailerSendSuccessResult();
|
return Mailer::formatMailerSendSuccessResult();
|
||||||
|
34
tests/unit/Mailer/Methods/ErrorMappers/PHPMailMapperTest.php
Normal file
34
tests/unit/Mailer/Methods/ErrorMappers/PHPMailMapperTest.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
namespace MailPoet\Test\Mailer\Methods\ErrorMappers;
|
||||||
|
|
||||||
|
use MailPoet\Mailer\MailerError;
|
||||||
|
use MailPoet\Mailer\Methods\ErrorMappers\PHPMailMapper;
|
||||||
|
|
||||||
|
class PHPMailMapperTest extends \MailPoetTest {
|
||||||
|
|
||||||
|
/** @var PHPMailMapper*/
|
||||||
|
private $mapper;
|
||||||
|
|
||||||
|
function _before() {
|
||||||
|
$this->mapper = new PHPMailMapper();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testGetProperErrorForSubscriber() {
|
||||||
|
$error = $this->mapper->getErrorForSubscriber('john@rambo.com', []);
|
||||||
|
expect($error->getLevel())->equals(MailerError::LEVEL_HARD);
|
||||||
|
expect($error->getMessage())->equals('PHPMail has returned an unknown error.');
|
||||||
|
expect($error->getSubscriberErrors()[0]->getEmail())->equals('john@rambo.com');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testGetProperErrorFromException() {
|
||||||
|
$error = $this->mapper->getErrorFromException(new \Exception('Some message'), 'john@rambo.com', []);
|
||||||
|
expect($error->getLevel())->equals(MailerError::LEVEL_HARD);
|
||||||
|
expect($error->getMessage())->equals('Some message');
|
||||||
|
expect($error->getSubscriberErrors()[0]->getEmail())->equals('john@rambo.com');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testGetSoftErrorFromExceptionForInvalidEmail() {
|
||||||
|
$error = $this->mapper->getErrorFromException(new \Exception('Invalid address. (Add ...'), 'john@rambo.com', []);
|
||||||
|
expect($error->getLevel())->equals(MailerError::LEVEL_SOFT);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user