Extract sending error messages from bridge to strings
The original error is stored under a new key for easier handling an error state. [MAILPOET-4639]
This commit is contained in:
@@ -23,8 +23,6 @@ class MailPoetMapper {
|
|||||||
const METHOD = Mailer::METHOD_MAILPOET;
|
const METHOD = Mailer::METHOD_MAILPOET;
|
||||||
|
|
||||||
const TEMPORARY_UNAVAILABLE_RETRY_INTERVAL = 300; // seconds
|
const TEMPORARY_UNAVAILABLE_RETRY_INTERVAL = 300; // seconds
|
||||||
// Bridge message from https://github.com/mailpoet/services-bridge/blob/a3fbf0c1a88abc77840f9ec9f3965e632ce7d8b5/api/messages.rb#L16
|
|
||||||
const MAILPOET_BRIDGE_DMRAC_ERROR = "Email violates Sender Domain's DMARC policy. Please set up sender authentication.";
|
|
||||||
|
|
||||||
/** @var Bridge */
|
/** @var Bridge */
|
||||||
private $bridge;
|
private $bridge;
|
||||||
@@ -78,7 +76,7 @@ class MailPoetMapper {
|
|||||||
$resultParsed = json_decode($result['message'], true);
|
$resultParsed = json_decode($result['message'], true);
|
||||||
$message = __('Error while sending.', 'mailpoet');
|
$message = __('Error while sending.', 'mailpoet');
|
||||||
if (!is_array($resultParsed)) {
|
if (!is_array($resultParsed)) {
|
||||||
if ($result['message'] === self::MAILPOET_BRIDGE_DMRAC_ERROR) {
|
if ($result['error'] === API::ERROR_MESSAGE_DMRAC) {
|
||||||
$message .= $this->getDmarcMessage($result, $sender);
|
$message .= $this->getDmarcMessage($result, $sender);
|
||||||
} else {
|
} else {
|
||||||
$message .= ' ' . $result['message'];
|
$message .= ' ' . $result['message'];
|
||||||
@@ -244,19 +242,19 @@ class MailPoetMapper {
|
|||||||
* Returns error $message and $operation for API::RESPONSE_CODE_CAN_NOT_SEND
|
* Returns error $message and $operation for API::RESPONSE_CODE_CAN_NOT_SEND
|
||||||
*/
|
*/
|
||||||
private function getCanNotSendError(array $result, $sender): array {
|
private function getCanNotSendError(array $result, $sender): array {
|
||||||
if ($result['message'] === MailerError::MESSAGE_PENDING_APPROVAL) {
|
if ($result['error'] === API::ERROR_MESSAGE_PENDING_APPROVAL) {
|
||||||
$operation = MailerError::OPERATION_PENDING_APPROVAL;
|
$operation = MailerError::OPERATION_PENDING_APPROVAL;
|
||||||
$message = $this->getPendingApprovalMessage();
|
$message = $this->getPendingApprovalMessage();
|
||||||
return [$operation, $message];
|
return [$operation, $message];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result['message'] === MailerError::MESSAGE_EMAIL_INSUFFICIENT_PRIVILEGES) {
|
if ($result['error'] === API::ERROR_MESSAGE_INSUFFICIENT_PRIVILEGES) {
|
||||||
$operation = MailerError::OPERATION_INSUFFICIENT_PRIVILEGES;
|
$operation = MailerError::OPERATION_INSUFFICIENT_PRIVILEGES;
|
||||||
$message = $this->getInsufficientPrivilegesMessage();
|
$message = $this->getInsufficientPrivilegesMessage();
|
||||||
return [$operation, $message];
|
return [$operation, $message];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result['message'] === MailerError::MESSAGE_EMAIL_VOLUME_LIMIT_REACHED) {
|
if ($result['error'] === API::ERROR_MESSAGE_EMAIL_VOLUME_LIMIT_REACHED) {
|
||||||
// Update the current email volume limit from MSS
|
// Update the current email volume limit from MSS
|
||||||
$premiumKey = $this->settings->get(Bridge::PREMIUM_KEY_SETTING_NAME);
|
$premiumKey = $this->settings->get(Bridge::PREMIUM_KEY_SETTING_NAME);
|
||||||
$result = $this->bridge->checkPremiumKey($premiumKey);
|
$result = $this->bridge->checkPremiumKey($premiumKey);
|
||||||
@@ -267,7 +265,7 @@ class MailPoetMapper {
|
|||||||
return [$operation, $message];
|
return [$operation, $message];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result['message'] === MailerError::MESSAGE_EMAIL_NOT_AUTHORIZED) {
|
if ($result['error'] === API::ERROR_MESSAGE_INVALID_FROM) {
|
||||||
$operation = MailerError::OPERATION_AUTHORIZATION;
|
$operation = MailerError::OPERATION_AUTHORIZATION;
|
||||||
$message = $this->getUnauthorizedEmailMessage($sender);
|
$message = $this->getUnauthorizedEmailMessage($sender);
|
||||||
return [$operation, $message];
|
return [$operation, $message];
|
||||||
|
@@ -4,7 +4,6 @@ namespace MailPoet\Mailer\Methods;
|
|||||||
|
|
||||||
use MailPoet\Config\ServicesChecker;
|
use MailPoet\Config\ServicesChecker;
|
||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Mailer\MailerError;
|
|
||||||
use MailPoet\Mailer\Methods\Common\BlacklistCheck;
|
use MailPoet\Mailer\Methods\Common\BlacklistCheck;
|
||||||
use MailPoet\Mailer\Methods\ErrorMappers\MailPoetMapper;
|
use MailPoet\Mailer\Methods\ErrorMappers\MailPoetMapper;
|
||||||
use MailPoet\Services\AuthorizedEmailsController;
|
use MailPoet\Services\AuthorizedEmailsController;
|
||||||
@@ -83,7 +82,7 @@ class MailPoet implements MailerMethod {
|
|||||||
} elseif (
|
} elseif (
|
||||||
!empty($result['code'])
|
!empty($result['code'])
|
||||||
&& $result['code'] === API::RESPONSE_CODE_CAN_NOT_SEND
|
&& $result['code'] === API::RESPONSE_CODE_CAN_NOT_SEND
|
||||||
&& $result['message'] === MailerError::MESSAGE_EMAIL_NOT_AUTHORIZED
|
&& $result['error'] === API::ERROR_MESSAGE_INVALID_FROM
|
||||||
) {
|
) {
|
||||||
$this->authorizedEmailsController->checkAuthorizedEmailAddresses();
|
$this->authorizedEmailsController->checkAuthorizedEmailAddresses();
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,16 @@ class API {
|
|||||||
const RESPONSE_CODE_PAYLOAD_ERROR = 400;
|
const RESPONSE_CODE_PAYLOAD_ERROR = 400;
|
||||||
const RESPONSE_CODE_CAN_NOT_SEND = 403;
|
const RESPONSE_CODE_CAN_NOT_SEND = 403;
|
||||||
|
|
||||||
|
// Bridge messages from https://github.com/mailpoet/services-bridge/blob/master/api/messages.rb
|
||||||
|
public const ERROR_MESSAGE_BANNED = 'Key is valid, but the action is forbidden';
|
||||||
|
public const ERROR_MESSAGE_INVALID_FROM = 'The email address is not authorized';
|
||||||
|
public const ERROR_MESSAGE_PENDING_APPROVAL = 'Key is valid, but not approved yet; you can send only to authorized email addresses at the moment';
|
||||||
|
public const ERROR_MESSAGE_DMRAC = "Email violates Sender Domain's DMARC policy. Please set up sender authentication.";
|
||||||
|
// Bridge message from https://github.com/mailpoet/services-bridge/blob/master/extensions/authentication/basic_strategy.rb
|
||||||
|
public const ERROR_MESSAGE_UNAUTHORIZED = 'No valid API key provided';
|
||||||
|
public const ERROR_MESSAGE_INSUFFICIENT_PRIVILEGES = 'Insufficient privileges';
|
||||||
|
public const ERROR_MESSAGE_EMAIL_VOLUME_LIMIT_REACHED = 'Email volume limit reached';
|
||||||
|
|
||||||
private $apiKey;
|
private $apiKey;
|
||||||
private $wp;
|
private $wp;
|
||||||
/** @var LoggerFactory */
|
/** @var LoggerFactory */
|
||||||
@@ -133,7 +143,8 @@ class API {
|
|||||||
$this->wp->wpRemoteRetrieveResponseMessage($result);
|
$this->wp->wpRemoteRetrieveResponseMessage($result);
|
||||||
return [
|
return [
|
||||||
'status' => self::SENDING_STATUS_SEND_ERROR,
|
'status' => self::SENDING_STATUS_SEND_ERROR,
|
||||||
'message' => $response,
|
'error' => $response,
|
||||||
|
'message' => $this->getTranslatedErrorMessage($response),
|
||||||
'code' => $responseCode,
|
'code' => $responseCode,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -333,6 +344,28 @@ class API {
|
|||||||
return $this->apiKey;
|
return $this->apiKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTranslatedErrorMessage(string $errorMessage): string {
|
||||||
|
switch ($errorMessage) {
|
||||||
|
case self::ERROR_MESSAGE_BANNED:
|
||||||
|
return __('Key is valid, but the action is forbidden.', 'mailpoet');
|
||||||
|
case self::ERROR_MESSAGE_INVALID_FROM:
|
||||||
|
return __('The email address is not authorized.', 'mailpoet');
|
||||||
|
case self::ERROR_MESSAGE_PENDING_APPROVAL:
|
||||||
|
return __('Key is valid, but not approved yet; you can send only to authorized email addresses at the moment.', 'mailpoet');
|
||||||
|
case self::ERROR_MESSAGE_DMRAC:
|
||||||
|
return __("Email violates Sender Domain's DMARC policy. Please set up sender authentication.", 'mailpoet');
|
||||||
|
case self::ERROR_MESSAGE_UNAUTHORIZED:
|
||||||
|
return __('No valid API key provided.', 'mailpoet');
|
||||||
|
case self::ERROR_MESSAGE_INSUFFICIENT_PRIVILEGES:
|
||||||
|
return __('Insufficient privileges.', 'mailpoet');
|
||||||
|
case self::ERROR_MESSAGE_EMAIL_VOLUME_LIMIT_REACHED:
|
||||||
|
return __('Email volume limit reached.', 'mailpoet');
|
||||||
|
// when we don't match translation we return the origin
|
||||||
|
default:
|
||||||
|
return $errorMessage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private function auth() {
|
private function auth() {
|
||||||
return 'Basic ' . base64_encode('api:' . $this->apiKey);
|
return 'Basic ' . base64_encode('api:' . $this->apiKey);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user