Move Swiftmailer to vendor-prefixed

[MAILPOET-2363]
This commit is contained in:
Jan Jakeš
2019-09-24 16:16:51 +02:00
committed by Jack Kitterhing
parent eb3ea8d540
commit 86675dfd4f
11 changed files with 107 additions and 71 deletions

View File

@ -12,7 +12,6 @@
"mtdowling/cron-expression": "^1.1", "mtdowling/cron-expression": "^1.1",
"nesbot/carbon": "^1.21", "nesbot/carbon": "^1.21",
"soundasleep/html2text": "dev-master", "soundasleep/html2text": "dev-master",
"swiftmailer/swiftmailer": "5.4.12",
"tburry/pquery": "^1.1.1" "tburry/pquery": "^1.1.1"
}, },
"require-dev": { "require-dev": {

56
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "c641885578d3d2bb8a3853d01d0827fe", "content-hash": "f65ddd571e509c0289261f02e514f883",
"packages": [ "packages": [
{ {
"name": "cerdic/css-tidy", "name": "cerdic/css-tidy",
@ -325,60 +325,6 @@
}, },
"time": "2019-04-24T12:03:33+00:00" "time": "2019-04-24T12:03:33+00:00"
}, },
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.12",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "181b89f18a90f8925ef805f950d47a7190e9b950"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950",
"reference": "181b89f18a90f8925ef805f950d47a7190e9b950",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.4-dev"
}
},
"autoload": {
"files": [
"lib/swift_required.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Corbyn"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
"homepage": "https://swiftmailer.symfony.com",
"keywords": [
"email",
"mail",
"mailer"
],
"time": "2018-07-31T09:26:32+00:00"
},
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.12.0", "version": "v1.12.0",

View File

@ -17,9 +17,6 @@ class RequirementsChecker {
public $vendor_classes = [ public $vendor_classes = [
'\ORM', '\ORM',
'\Model', '\Model',
'\Swift_Mailer',
'\Swift_SmtpTransport',
'\Swift_Message',
'\Carbon\Carbon', '\Carbon\Carbon',
'\Sudzy\ValidModel', '\Sudzy\ValidModel',
'\Sudzy\ValidationException', '\Sudzy\ValidationException',

View File

@ -6,6 +6,7 @@ use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\Methods\Common\BlacklistCheck; use MailPoet\Mailer\Methods\Common\BlacklistCheck;
use MailPoet\Mailer\Methods\ErrorMappers\AmazonSESMapper; use MailPoet\Mailer\Methods\ErrorMappers\AmazonSESMapper;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Swift_Message;
class AmazonSES { class AmazonSES {
public $aws_access_key; public $aws_access_key;
@ -108,7 +109,7 @@ class AmazonSES {
} }
function createMessage($newsletter, $subscriber, $extra_params = []) { function createMessage($newsletter, $subscriber, $extra_params = []) {
$message = \Swift_Message::newInstance() $message = Swift_Message::newInstance()
->setTo($this->processSubscriber($subscriber)) ->setTo($this->processSubscriber($subscriber))
->setFrom([ ->setFrom([
$this->sender['from_email'] => $this->sender['from_name'], $this->sender['from_email'] => $this->sender['from_name'],
@ -132,7 +133,7 @@ class AmazonSES {
return $message; return $message;
} }
function encodeMessage(\Swift_Message $message) { function encodeMessage(Swift_Message $message) {
return base64_encode($message->toString()); return base64_encode($message->toString());
} }

View File

@ -6,6 +6,7 @@ use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerError; use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\SubscriberError; use MailPoet\Mailer\SubscriberError;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Swift_RfcComplianceException;
class AmazonSESMapper { class AmazonSESMapper {
use BlacklistErrorMapperTrait; use BlacklistErrorMapperTrait;
@ -15,7 +16,7 @@ class AmazonSESMapper {
function getErrorFromException(\Exception $e, $subscriber) { function getErrorFromException(\Exception $e, $subscriber) {
$level = MailerError::LEVEL_HARD; $level = MailerError::LEVEL_HARD;
if ($e instanceof \Swift_RfcComplianceException) { if ($e instanceof Swift_RfcComplianceException) {
$level = MailerError::LEVEL_SOFT; $level = MailerError::LEVEL_SOFT;
} }
$subscriber_errors = [new SubscriberError($subscriber, null)]; $subscriber_errors = [new SubscriberError($subscriber, null)];

View File

@ -6,6 +6,7 @@ use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerError; use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\SubscriberError; use MailPoet\Mailer\SubscriberError;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Swift_RfcComplianceException;
class SMTPMapper { class SMTPMapper {
use BlacklistErrorMapperTrait; use BlacklistErrorMapperTrait;
@ -22,7 +23,7 @@ class SMTPMapper {
$message = explode(PHP_EOL, $e->getMessage()); $message = explode(PHP_EOL, $e->getMessage());
$level = MailerError::LEVEL_HARD; $level = MailerError::LEVEL_HARD;
if ($e instanceof \Swift_RfcComplianceException) { if ($e instanceof Swift_RfcComplianceException) {
$level = MailerError::LEVEL_SOFT; $level = MailerError::LEVEL_SOFT;
} }
$subscriber_errors = [new SubscriberError($subscriber, null)]; $subscriber_errors = [new SubscriberError($subscriber, null)];

View File

@ -6,6 +6,11 @@ use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\Methods\Common\BlacklistCheck; use MailPoet\Mailer\Methods\Common\BlacklistCheck;
use MailPoet\Mailer\Methods\ErrorMappers\SMTPMapper; use MailPoet\Mailer\Methods\ErrorMappers\SMTPMapper;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Swift_Mailer;
use MailPoetVendor\Swift_Message;
use MailPoetVendor\Swift_Plugins_LoggerPlugin;
use MailPoetVendor\Swift_Plugins_Loggers_ArrayLogger;
use MailPoetVendor\Swift_SmtpTransport;
class SMTP { class SMTP {
public $host; public $host;
@ -45,8 +50,8 @@ class SMTP {
$return_path : $return_path :
$this->sender['from_email']; $this->sender['from_email'];
$this->mailer = $this->buildMailer(); $this->mailer = $this->buildMailer();
$this->mailer_logger = new \Swift_Plugins_Loggers_ArrayLogger(); $this->mailer_logger = new Swift_Plugins_Loggers_ArrayLogger();
$this->mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($this->mailer_logger)); $this->mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($this->mailer_logger));
$this->error_mapper = $error_mapper; $this->error_mapper = $error_mapper;
$this->blacklist = new BlacklistCheck(); $this->blacklist = new BlacklistCheck();
} }
@ -73,7 +78,7 @@ class SMTP {
} }
function buildMailer() { function buildMailer() {
$transport = \Swift_SmtpTransport::newInstance( $transport = Swift_SmtpTransport::newInstance(
$this->host, $this->port, $this->encryption); $this->host, $this->port, $this->encryption);
$connection_timeout = $this->wp->applyFilters('mailpoet_mailer_smtp_connection_timeout', self::SMTP_CONNECTION_TIMEOUT); $connection_timeout = $this->wp->applyFilters('mailpoet_mailer_smtp_connection_timeout', self::SMTP_CONNECTION_TIMEOUT);
$transport->setTimeout($connection_timeout); $transport->setTimeout($connection_timeout);
@ -83,11 +88,11 @@ class SMTP {
->setPassword($this->password); ->setPassword($this->password);
} }
$transport = $this->wp->applyFilters('mailpoet_mailer_smtp_transport_agent', $transport); $transport = $this->wp->applyFilters('mailpoet_mailer_smtp_transport_agent', $transport);
return \Swift_Mailer::newInstance($transport); return Swift_Mailer::newInstance($transport);
} }
function createMessage($newsletter, $subscriber, $extra_params = []) { function createMessage($newsletter, $subscriber, $extra_params = []) {
$message = \Swift_Message::newInstance() $message = Swift_Message::newInstance()
->setTo($this->processSubscriber($subscriber)) ->setTo($this->processSubscriber($subscriber))
->setFrom( ->setFrom(
[ [

View File

@ -7,6 +7,7 @@
"gregwar/captcha": "^1.1", "gregwar/captcha": "^1.1",
"monolog/monolog": "^1.23", "monolog/monolog": "^1.23",
"sabberworm/php-css-parser": "^8.1", "sabberworm/php-css-parser": "^8.1",
"swiftmailer/swiftmailer": "5.4.12",
"symfony/dependency-injection": "3.4.26", "symfony/dependency-injection": "3.4.26",
"symfony/polyfill-mbstring": "^1.11", "symfony/polyfill-mbstring": "^1.11",
"symfony/polyfill-php72": "^1.11", "symfony/polyfill-php72": "^1.11",
@ -21,7 +22,8 @@
"../tools/vendor/php-scoper.phar add-prefix", "../tools/vendor/php-scoper.phar add-prefix",
"mv ./build/* ../vendor-prefixed", "mv ./build/* ../vendor-prefixed",
"php fix-twig.php", "php fix-twig.php",
"php fix-doctrine.php" "php fix-doctrine.php",
"php fix-swiftmailer.php"
] ]
}, },
"config": { "config": {

56
prefixer/composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "74021a12e7237e4a9994dff6fc888b6e", "content-hash": "3c34a814f0565a78f75d50814f8a165d",
"packages": [ "packages": [
{ {
"name": "doctrine/annotations", "name": "doctrine/annotations",
@ -883,6 +883,60 @@
], ],
"time": "2018-07-13T13:23:56+00:00" "time": "2018-07-13T13:23:56+00:00"
}, },
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.12",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "181b89f18a90f8925ef805f950d47a7190e9b950"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950",
"reference": "181b89f18a90f8925ef805f950d47a7190e9b950",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.4-dev"
}
},
"autoload": {
"files": [
"lib/swift_required.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Corbyn"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
"homepage": "https://swiftmailer.symfony.com",
"keywords": [
"email",
"mail",
"mailer"
],
"time": "2018-07-31T09:26:32+00:00"
},
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v3.4.29", "version": "v3.4.29",

29
prefixer/fix-swiftmailer.php Executable file
View File

@ -0,0 +1,29 @@
<?php
// throw exception if anything fails
set_error_handler(function ($severity, $message, $file, $line) {
throw new ErrorException($message, 0, $severity, $file, $line);
});
// fix Swiftmailer namespaces in string not being correctly prefixed
$iterator = new RecursiveDirectoryIterator(__DIR__ . '/../vendor-prefixed/swiftmailer', RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $file) {
if (substr($file, -3) === 'php') {
$data = file_get_contents($file);
$data = preg_replace("/'(Swift_[^']*?::)/", "'MailPoetVendor\\\\\\\\$1", $data);
$data = preg_replace("/InstanceOf\('(Swift_[^']*?')/", "InstanceOf('MailPoetVendor\\\\\\\\$1", $data);
$data = preg_replace("/registerAutoload\('(_swift[^']*?')/", "registerAutoload('MailPoetVendor\\\\\\\\$1", $data);
$data = str_replace('SWIFT_INIT_LOADED', 'MAILPOET_SWIFT_INIT_LOADED', $data);
// require-once 'swift_init.php' in classes since prefixed version won't use Swift's autoloader
if (strpos($file, 'classes') !== false) {
$path = substr($file, strpos($file, 'classes'));
$nesting_level = substr_count(str_replace('\\', '/', $path), '/');
$search = 'namespace MailPoetVendor;';
$require_path = str_repeat('/..', $nesting_level) . '/swift_init.php';
$data = str_replace($search, "$search\n\nrequire_once __DIR__ . '$require_path';", $data);
}
file_put_contents($file, $data);
}
}

View File

@ -7,6 +7,7 @@ use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerError; use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\Methods\ErrorMappers\SMTPMapper; use MailPoet\Mailer\Methods\ErrorMappers\SMTPMapper;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Swift_RfcComplianceException;
class SMTPMapperTest extends \MailPoetUnitTest { class SMTPMapperTest extends \MailPoetUnitTest {
@ -37,7 +38,7 @@ class SMTPMapperTest extends \MailPoetUnitTest {
function testItCreatesSoftErrorForInvalidEmail() { function testItCreatesSoftErrorForInvalidEmail() {
$message = 'Invalid email'; $message = 'Invalid email';
$error = $this->mapper->getErrorFromException(new \Swift_RfcComplianceException($message), 'john@rambo.com'); $error = $this->mapper->getErrorFromException(new Swift_RfcComplianceException($message), 'john@rambo.com');
expect($error->getLevel())->equals(MailerError::LEVEL_SOFT); expect($error->getLevel())->equals(MailerError::LEVEL_SOFT);
} }