Show different error message when sending from unauthorized *free* email address

[MAILPOET-1882]
This commit is contained in:
Ján Mikláš
2019-03-19 13:54:39 +01:00
committed by M. Shull
parent 5621d1df25
commit 3ec5bf10bb
2 changed files with 37 additions and 17 deletions

View File

@@ -5,6 +5,7 @@ use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\SubscriberError; use MailPoet\Mailer\SubscriberError;
use MailPoet\Services\Bridge\API; use MailPoet\Services\Bridge\API;
use InvalidArgumentException; use InvalidArgumentException;
use MailPoet\Util\FreeDomains;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@@ -25,7 +26,7 @@ class MailPoetMapper {
); );
} }
function getErrorForResult(array $result, $subscribers, $sender = null) { function getErrorForResult(array $result, $subscribers, $sender = null, $newsletter = null) {
$level = MailerError::LEVEL_HARD; $level = MailerError::LEVEL_HARD;
$operation = MailerError::OPERATION_SEND; $operation = MailerError::OPERATION_SEND;
$retry_interval = null; $retry_interval = null;
@@ -57,7 +58,7 @@ class MailPoetMapper {
case API::RESPONSE_CODE_CAN_NOT_SEND: case API::RESPONSE_CODE_CAN_NOT_SEND:
if ($result['message'] === MailerError::MESSAGE_EMAIL_NOT_AUTHORIZED) { if ($result['message'] === MailerError::MESSAGE_EMAIL_NOT_AUTHORIZED) {
$operation = MailerError::OPERATION_AUTHORIZATION; $operation = MailerError::OPERATION_AUTHORIZATION;
$message = $this->getUnauthorizedEmailMessage($sender); $message = $this->getUnauthorizedEmailMessage($sender, $newsletter[0]);
} else { } else {
$message = $this->getAccountBannedMessage(); $message = $this->getAccountBannedMessage();
} }
@@ -88,18 +89,37 @@ class MailPoetMapper {
return $errors; return $errors;
} }
private function getUnauthorizedEmailMessage($sender) { private function getUnauthorizedEmailMessage($sender, $newsletter) {
$message = sprintf(__('<p>The MailPoet Sending Service did not send your latest email because the address <i>%s</i> is not yet authorized.</p>', 'mailpoet'), $sender ? $sender['from_email'] : __('Unknown address')); $email = $sender ? $sender['from_email'] : null;
$message .= '<p>'; if ($email && FreeDomains::isEmailOnFreeDomain($email)) {
$message .= Helpers::replaceLinkTags( $message = sprintf(__('<p>The MailPoet Sending Service cant send email with the email address <i>%s</i>. You need to use an address like <i>you@yourdomain.com</i></p>', 'mailpoet'), $email);
__('[link]Authorize your email in your account now.[/link]', 'mailpoet'), $message .= '<p>';
'https://account.mailpoet.com/authorization', if ($newsletter && $newsletter['id']) {
array( $message .= Helpers::replaceLinkTags(
'class' => 'button button-primary', __('[link]Change my email address[/link]', 'mailpoet'),
'target' => '_blank', 'admin.php?page=mailpoet-newsletters#/send/' . $newsletter['id'],
'rel' => 'noopener noreferrer', array('class' => 'button button-primary')
) );
); } else {
$message .= Helpers::replaceLinkTags(
__('[link]Change my email address[/link]', 'mailpoet'),
'admin.php?page=mailpoet-settings',
array('class' => 'button button-primary')
);
}
} else {
$message = sprintf(__('<p>The MailPoet Sending Service did not send your latest email because the address <i>%s</i> is not yet authorized.</p>', 'mailpoet'), $email ?: __('Unknown address'));
$message .= '<p>';
$message .= Helpers::replaceLinkTags(
__('[link]Authorize your email in your account now.[/link]', 'mailpoet'),
'https://account.mailpoet.com/authorization',
array(
'class' => 'button button-primary',
'target' => '_blank',
'rel' => 'noopener noreferrer',
)
);
}
$message .= ' &nbsp; <button class="button js-button-resume-sending">' . __('Resume sending', 'mailpoet') . '</button>'; $message .= ' &nbsp; <button class="button js-button-resume-sending">' . __('Resume sending', 'mailpoet') . '</button>';
$message .= '</p>'; $message .= '</p>';
$message .= "<script>jQuery('.js-button-resume-sending').on('click', function() { MailPoet.Ajax.post({ api_version: window.mailpoet_api_version, endpoint: 'mailer', action: 'resumeSending' }).done(function() { jQuery('.js-error-unauthorized-email').slideUp(); MailPoet.Notice.success('" . __('Sending has been resumed.') . "'); if (window.mailpoet_listing) { window.mailpoet_listing.forceUpdate(); }}).fail(function(response) { if (response.errors.length > 0) { MailPoet.Notice.error(response.errors.map(function(error) { return error.message }), { scroll: true }); }}); })</script>"; $message .= "<script>jQuery('.js-button-resume-sending').on('click', function() { MailPoet.Ajax.post({ api_version: window.mailpoet_api_version, endpoint: 'mailer', action: 'resumeSending' }).done(function() { jQuery('.js-error-unauthorized-email').slideUp(); MailPoet.Notice.success('" . __('Sending has been resumed.') . "'); if (window.mailpoet_listing) { window.mailpoet_listing.forceUpdate(); }}).fail(function(response) { if (response.errors.length > 0) { MailPoet.Notice.error(response.errors.map(function(error) { return error.message }), { scroll: true }); }}); })</script>";

View File

@@ -39,7 +39,7 @@ class MailPoet {
$error = $this->error_mapper->getConnectionError($result['message']); $error = $this->error_mapper->getConnectionError($result['message']);
return Mailer::formatMailerErrorResult($error); return Mailer::formatMailerErrorResult($error);
case API::SENDING_STATUS_SEND_ERROR: case API::SENDING_STATUS_SEND_ERROR:
$error = $this->processSendError($result, $subscriber); $error = $this->processSendError($result, $subscriber, $newsletter);
return Mailer::formatMailerErrorResult($error); return Mailer::formatMailerErrorResult($error);
case API::SENDING_STATUS_OK: case API::SENDING_STATUS_OK:
default: default:
@@ -47,11 +47,11 @@ class MailPoet {
} }
} }
function processSendError($result, $subscriber) { function processSendError($result, $subscriber, $newsletter) {
if (!empty($result['code']) && $result['code'] === API::RESPONSE_CODE_KEY_INVALID) { if (!empty($result['code']) && $result['code'] === API::RESPONSE_CODE_KEY_INVALID) {
Bridge::invalidateKey(); Bridge::invalidateKey();
} }
return $this->error_mapper->getErrorForResult($result, $subscriber, $this->sender); return $this->error_mapper->getErrorForResult($result, $subscriber, $this->sender, $newsletter);
} }
function processSubscriber($subscriber) { function processSubscriber($subscriber) {