Prevent using invalid bounce email address

[MAILPOET-2933]
This commit is contained in:
Rostislav Wolny
2021-01-08 15:38:38 +01:00
committed by Veljko V
parent 6c63a562d1
commit 03400bc4f7
2 changed files with 25 additions and 4 deletions

View File

@@ -15,6 +15,7 @@ use MailPoet\Mailer\Methods\SendGrid;
use MailPoet\Mailer\Methods\SMTP; use MailPoet\Mailer\Methods\SMTP;
use MailPoet\Services\AuthorizedEmailsController; use MailPoet\Services\AuthorizedEmailsController;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WP\Functions as WPFunctions;
class Mailer { class Mailer {
public $mailerConfig; public $mailerConfig;
@@ -24,6 +25,10 @@ class Mailer {
public $mailerInstance; public $mailerInstance;
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
/** @var WPFunctions */
private $wp;
const MAILER_CONFIG_SETTING_NAME = 'mta'; const MAILER_CONFIG_SETTING_NAME = 'mta';
const SENDING_LIMIT_INTERVAL_MULTIPLIER = 60; const SENDING_LIMIT_INTERVAL_MULTIPLIER = 60;
const METHOD_MAILPOET = 'MailPoet'; const METHOD_MAILPOET = 'MailPoet';
@@ -32,11 +37,15 @@ class Mailer {
const METHOD_PHPMAIL = 'PHPMail'; const METHOD_PHPMAIL = 'PHPMail';
const METHOD_SMTP = 'SMTP'; const METHOD_SMTP = 'SMTP';
public function __construct(SettingsController $settings = null) { public function __construct(SettingsController $settings = null, WPFunctions $wp = null) {
if (!$settings) { if (!$settings) {
$settings = SettingsController::getInstance(); $settings = SettingsController::getInstance();
} }
if (!$wp) {
$wp = WPFunctions::get();
}
$this->settings = $settings; $this->settings = $settings;
$this->wp = $wp;
} }
public function init($mailer = false, $sender = false, $replyTo = false, $returnPath = false) { public function init($mailer = false, $sender = false, $replyTo = false, $returnPath = false) {
@@ -156,9 +165,11 @@ class Mailer {
} }
public function getReturnPathAddress($returnPath) { public function getReturnPathAddress($returnPath) {
return ($returnPath) ? if ($returnPath) {
$returnPath : return $returnPath;
$this->settings->get('bounce.address'); }
$bounceAddress = $this->settings->get('bounce.address');
return $this->wp->isEmail($bounceAddress) ? $bounceAddress : null;
} }
/** /**

View File

@@ -201,6 +201,16 @@ class MailerTest extends \MailPoetTest {
expect($result['response'])->true(); expect($result['response'])->true();
} }
public function testItIgnoresInvalidBounceAddress() {
$this->settings->set('bounce.address', 'ok@address.com');
$mailer = new Mailer();
$mailer->init($this->mailer, $this->sender, $this->replyTo);
expect($mailer->returnPath)->equals('ok@address.com');
$this->settings->set('bounce.address', 'invalid');
$mailer->init($this->mailer, $this->sender, $this->replyTo);
expect($mailer->returnPath)->null();
}
public function _after() { public function _after() {
$this->diContainer->get(SettingsRepository::class)->truncate(); $this->diContainer->get(SettingsRepository::class)->truncate();
} }