Allow user send with any email address from verified domain

MAILPOET-4601
This commit is contained in:
Oluwaseun Olorunsola
2022-09-13 17:46:11 +01:00
committed by Aschepikov
parent bb42da6a87
commit bd7da6b28c
2 changed files with 32 additions and 1 deletions

View File

@ -22,6 +22,8 @@ import { fromUrl } from 'common/thumbnail.ts';
import { GlobalContext } from 'context/index.jsx'; import { GlobalContext } from 'context/index.jsx';
import { extractEmailDomain } from 'common/functions';
const automaticEmails = window.mailpoet_woocommerce_automatic_emails || []; const automaticEmails = window.mailpoet_woocommerce_automatic_emails || [];
const generateGaTrackingCampaignName = (id, subject) => { const generateGaTrackingCampaignName = (id, subject) => {
@ -168,6 +170,12 @@ class NewsletterSendComponent extends Component {
if (window.mailpoet_mta_method !== 'MailPoet') { if (window.mailpoet_mta_method !== 'MailPoet') {
return true; return true;
} }
const verifiedDomains = await this.loadVerifiedSenderDomains();
const senderDomain = extractEmailDomain(this.state.item.sender_address);
if (verifiedDomains.indexOf(senderDomain) !== -1) {
// allow user send with any email address from verified domain
return true;
}
const addresses = await this.loadAuthorizedEmailAddresses(); const addresses = await this.loadAuthorizedEmailAddresses();
const fromAddress = this.state.item.sender_address; const fromAddress = this.state.item.sender_address;
return addresses.indexOf(fromAddress) !== -1; return addresses.indexOf(fromAddress) !== -1;
@ -275,6 +283,18 @@ class NewsletterSendComponent extends Component {
return authorizedEmails; return authorizedEmails;
}; };
loadVerifiedSenderDomains = async () => {
if (window.mailpoet_mta_method !== 'MailPoet') {
return [];
}
const response = await MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'mailer',
action: 'getVerifiedSenderDomains',
});
return response.data || [];
};
handleSend = (e) => { handleSend = (e) => {
e.preventDefault(); e.preventDefault();

View File

@ -9,6 +9,7 @@ use MailPoet\Mailer\MailerFactory;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
use MailPoet\Mailer\MetaInfo; use MailPoet\Mailer\MetaInfo;
use MailPoet\Services\AuthorizedEmailsController; use MailPoet\Services\AuthorizedEmailsController;
use MailPoet\Services\AuthorizedSenderDomainController;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
@ -29,6 +30,9 @@ class Mailer extends APIEndpoint {
/** @var MailerFactory */ /** @var MailerFactory */
private $mailerFactory; private $mailerFactory;
/** @var AuthorizedSenderDomainController */
private $senderDomainController;
public $permissions = [ public $permissions = [
'global' => AccessControl::PERMISSION_MANAGE_EMAILS, 'global' => AccessControl::PERMISSION_MANAGE_EMAILS,
]; ];
@ -38,13 +42,15 @@ class Mailer extends APIEndpoint {
SettingsController $settings, SettingsController $settings,
Bridge $bridge, Bridge $bridge,
MailerFactory $mailerFactory, MailerFactory $mailerFactory,
MetaInfo $mailerMetaInfo MetaInfo $mailerMetaInfo,
AuthorizedSenderDomainController $senderDomainController
) { ) {
$this->authorizedEmailsController = $authorizedEmailsController; $this->authorizedEmailsController = $authorizedEmailsController;
$this->settings = $settings; $this->settings = $settings;
$this->bridge = $bridge; $this->bridge = $bridge;
$this->mailerFactory = $mailerFactory; $this->mailerFactory = $mailerFactory;
$this->mailerMetaInfo = $mailerMetaInfo; $this->mailerMetaInfo = $mailerMetaInfo;
$this->senderDomainController = $senderDomainController;
} }
public function send($data = []) { public function send($data = []) {
@ -89,4 +95,9 @@ class Mailer extends APIEndpoint {
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses(); $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses();
return $this->successResponse($authorizedEmails); return $this->successResponse($authorizedEmails);
} }
public function getVerifiedSenderDomains() {
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomains();
return $this->successResponse($verifiedDomains);
}
} }