diff --git a/mailpoet/assets/js/src/newsletters/send.jsx b/mailpoet/assets/js/src/newsletters/send.jsx index 192fa9dcab..2ac464b602 100644 --- a/mailpoet/assets/js/src/newsletters/send.jsx +++ b/mailpoet/assets/js/src/newsletters/send.jsx @@ -22,6 +22,8 @@ import { fromUrl } from 'common/thumbnail.ts'; import { GlobalContext } from 'context/index.jsx'; +import { extractEmailDomain } from 'common/functions'; + const automaticEmails = window.mailpoet_woocommerce_automatic_emails || []; const generateGaTrackingCampaignName = (id, subject) => { @@ -168,6 +170,12 @@ class NewsletterSendComponent extends Component { if (window.mailpoet_mta_method !== 'MailPoet') { 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 fromAddress = this.state.item.sender_address; return addresses.indexOf(fromAddress) !== -1; @@ -275,6 +283,18 @@ class NewsletterSendComponent extends Component { 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) => { e.preventDefault(); diff --git a/mailpoet/lib/API/JSON/v1/Mailer.php b/mailpoet/lib/API/JSON/v1/Mailer.php index 8e1715037d..54d71f8edd 100644 --- a/mailpoet/lib/API/JSON/v1/Mailer.php +++ b/mailpoet/lib/API/JSON/v1/Mailer.php @@ -9,6 +9,7 @@ use MailPoet\Mailer\MailerFactory; use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MetaInfo; use MailPoet\Services\AuthorizedEmailsController; +use MailPoet\Services\AuthorizedSenderDomainController; use MailPoet\Services\Bridge; use MailPoet\Settings\SettingsController; @@ -29,6 +30,9 @@ class Mailer extends APIEndpoint { /** @var MailerFactory */ private $mailerFactory; + /** @var AuthorizedSenderDomainController */ + private $senderDomainController; + public $permissions = [ 'global' => AccessControl::PERMISSION_MANAGE_EMAILS, ]; @@ -38,13 +42,15 @@ class Mailer extends APIEndpoint { SettingsController $settings, Bridge $bridge, MailerFactory $mailerFactory, - MetaInfo $mailerMetaInfo + MetaInfo $mailerMetaInfo, + AuthorizedSenderDomainController $senderDomainController ) { $this->authorizedEmailsController = $authorizedEmailsController; $this->settings = $settings; $this->bridge = $bridge; $this->mailerFactory = $mailerFactory; $this->mailerMetaInfo = $mailerMetaInfo; + $this->senderDomainController = $senderDomainController; } public function send($data = []) { @@ -89,4 +95,9 @@ class Mailer extends APIEndpoint { $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses(); return $this->successResponse($authorizedEmails); } + + public function getVerifiedSenderDomains() { + $verifiedDomains = $this->senderDomainController->getVerifiedSenderDomains(); + return $this->successResponse($verifiedDomains); + } }