diff --git a/assets/js/src/newsletters/listings/mixins.jsx b/assets/js/src/newsletters/listings/mixins.jsx index 29c7f1550b..ca22301320 100644 --- a/assets/js/src/newsletters/listings/mixins.jsx +++ b/assets/js/src/newsletters/listings/mixins.jsx @@ -410,9 +410,11 @@ const MailerMixin = { mailerErrorNotice += ` ${MailPoet.I18n.t('mailerErrorCode') .replace('%$1s', state.meta.mta_log.error.error_code)}`; } + // eslint-disable-next-line react/no-danger + mailerErrorNotice =

; return (

-

{ mailerErrorNotice }

+ { mailerErrorNotice }

{ mailerCheckSettingsNotice }

'_blank') + ); + break; case API::RESPONSE_CODE_KEY_INVALID: case API::RESPONSE_CODE_PAYLOAD_TOO_BIG: default: diff --git a/lib/Services/Bridge/API.php b/lib/Services/Bridge/API.php index e97352e295..9e59961b41 100644 --- a/lib/Services/Bridge/API.php +++ b/lib/Services/Bridge/API.php @@ -20,6 +20,7 @@ class API { const RESPONSE_CODE_NOT_ARRAY = 422; const RESPONSE_CODE_PAYLOAD_TOO_BIG = 413; const RESPONSE_CODE_PAYLOAD_ERROR = 400; + const RESPONSE_CODE_BANNED_ACCOUNT = 403; private $api_key; @@ -85,6 +86,7 @@ class API { 'message' => $result->get_error_message() ); } + $response_code = WPFunctions::wpRemoteRetrieveResponseCode($result); if($response_code !== 201) { $response = (WPFunctions::wpRemoteRetrieveBody($result)) ? diff --git a/tests/integration/Mailer/Methods/ErrorMappers/MailPoetMapperTest.php b/tests/integration/Mailer/Methods/ErrorMappers/MailPoetMapperTest.php index 697f18d393..71f8bca3be 100644 --- a/tests/integration/Mailer/Methods/ErrorMappers/MailPoetMapperTest.php +++ b/tests/integration/Mailer/Methods/ErrorMappers/MailPoetMapperTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Mailer\Methods\ErrorMappers; use MailPoet\Mailer\MailerError; use MailPoet\Mailer\Methods\ErrorMappers\MailPoetMapper; use MailPoet\Services\Bridge\API; +use MailPoet\Util\Helpers; class MailPoetMapperTest extends \MailPoetTest { /** @var MailPoetMapper */ @@ -39,6 +40,24 @@ class MailPoetMapperTest extends \MailPoetTest { expect($error->getMessage())->equals('JSON input is not an array'); } + function testGetErrorBannedAccount() { + $api_result = [ + 'code' => API::RESPONSE_CODE_BANNED_ACCOUNT, + 'status' => API::SENDING_STATUS_SEND_ERROR, + 'message' => 'this is a spam', + ]; + $error = $this->mapper->getErrorForResult($api_result, $this->subscribers); + + expect($error)->isInstanceOf(MailerError::class); + expect($error->getOperation())->equals(MailerError::OPERATION_SEND); + expect($error->getLevel())->equals(MailerError::LEVEL_HARD); + expect($error->getMessage())->equals(Helpers::replaceLinkTags( + __('You currently are not permitted to send any emails with MailPoet Sending Service, which may have happened due to poor deliverability. Please [link]contact our support team[/link] to resolve the issue.', 'mailpoet'), + 'https://www.mailpoet.com/support/', + array('target' => '_blank') + )); + } + function testGetErrorPayloadTooBig() { $api_result = [ 'code' => API::RESPONSE_CODE_PAYLOAD_TOO_BIG,