diff --git a/README.md b/README.md index cac7f99..073dc0a 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,12 @@ You can even use the send from feature to create an alias on the fly that does n You must generate aliases that use shared domains (e.g. circus.waltz449@anonaddy.me) beforehand in order to be able to send from them. +If you need to send an email to an address with an extension e.g. **hello+whatever@example.com** then it's exactly the same method: + + + +Just enter the extension too! + #### **Will people see my real email if I reply to a forwarded one?** No, your real email will not be shown, the email will look as if it has come from us instead. Just make sure not to include anything that might identify you when composing the reply, i.e. your full name. diff --git a/app/EmailData.php b/app/EmailData.php index ecc42c8..c1ade59 100644 --- a/app/EmailData.php +++ b/app/EmailData.php @@ -18,12 +18,16 @@ class EmailData $this->html = base64_encode($parser->getMessageBody('html')); $this->attachments = []; - foreach ($parser->getAttachments() as $attachment) { - $this->attachments[] = [ - 'stream' => base64_encode(stream_get_contents($attachment->getStream())), - 'file_name' => base64_encode($attachment->getFileName()), - 'mime' => base64_encode($attachment->getContentType()) - ]; + if ($parser->getParts()[1]['content-type'] === 'multipart/encrypted') { + $this->encryptedParts = $parser->getAttachments(); + } else { + foreach ($parser->getAttachments() as $attachment) { + $this->attachments[] = [ + 'stream' => base64_encode(stream_get_contents($attachment->getStream())), + 'file_name' => base64_encode($attachment->getFileName()), + 'mime' => base64_encode($attachment->getContentType()) + ]; + } } } } diff --git a/app/Helpers/AlreadyEncryptedSigner.php b/app/Helpers/AlreadyEncryptedSigner.php new file mode 100644 index 0000000..837576a --- /dev/null +++ b/app/Helpers/AlreadyEncryptedSigner.php @@ -0,0 +1,74 @@ +attachments = $attachments; + } + + /** + * @param Swift_Message $message + * + * @return $this + * + * @throws Swift_DependencyException + * @throws Swift_SwiftException + */ + public function signMessage(Swift_Message $message) + { + $message->setChildren([]); + + $message->setEncoder(Swift_DependencyContainer::getInstance()->lookup('mime.rawcontentencoder')); + + $type = $message->getHeaders()->get('Content-Type'); + + $type->setValue('multipart/encrypted'); + + $type->setParameters([ + 'protocol' => 'application/pgp-encrypted', + 'boundary' => $message->getBoundary() + ]); + + $body = 'This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)' . PHP_EOL; + + foreach ($this->attachments as $attachment) { + $body .= '--' . $message->getBoundary() . PHP_EOL; + $body .= $attachment->getMimePartStr() . PHP_EOL; + } + + $body .= '--'. $message->getBoundary() . '--'; + + $message->setBody($body); + + $messageHeaders = $message->getHeaders(); + $messageHeaders->removeAll('Content-Transfer-Encoding'); + + return $this; + } + + /** + * @return array + */ + public function getAlteredHeaders() + { + return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition', 'Content-Description']; + } + + /** + * @return $this + */ + public function reset() + { + return $this; + } +} diff --git a/app/Helpers/CustomMailer.php b/app/Helpers/CustomMailer.php deleted file mode 100644 index 5a1cfed..0000000 --- a/app/Helpers/CustomMailer.php +++ /dev/null @@ -1,59 +0,0 @@ -sendMailable($view); - } - - // First we need to parse the view, which could either be a string or an array - // containing both an HTML and plain text versions of the view which should - // be used when sending an e-mail. We will extract both of them out here. - if ($view) { - [$view, $plain, $raw] = $this->parseView($view); - } - - $data['message'] = $message = $this->createMessage(); - - // Once we have retrieved the view content for the e-mail we will set the body - // of this message using the HTML type, which will provide a simple wrapper - // to creating view based emails that are able to receive arrays of data. - $callback($message); - - if ($view) { - $this->addContent($message, $view, $plain, $raw, $data); - } - - // If a global "to" address has been set, we will set that address on the mail - // message. This is primarily useful during local development in which each - // message should be delivered into a single mail address for inspection. - if (isset($this->to['address'])) { - $this->setGlobalToAndRemoveCcAndBcc($message); - } - - // Next we will determine if the message should be sent. We give the developer - // one final chance to stop this message and then we will send it to all of - // its recipients. We will then fire the sent event for the sent message. - $swiftMessage = $message->getSwiftMessage(); - - if ($this->shouldSendMessage($swiftMessage, $data)) { - $this->sendSwiftMessage($swiftMessage); - - $this->dispatchSentEvent($message, $data); - } - } -} diff --git a/app/Mail/ForwardEmail.php b/app/Mail/ForwardEmail.php index 7941d76..6fa53dc 100644 --- a/app/Mail/ForwardEmail.php +++ b/app/Mail/ForwardEmail.php @@ -4,6 +4,7 @@ namespace App\Mail; use App\Alias; use App\EmailData; +use App\Helpers\AlreadyEncryptedSigner; use App\Helpers\OpenPGPSigner; use App\Notifications\GpgKeyExpired; use App\Recipient; @@ -34,6 +35,7 @@ class ForwardEmail extends Mailable implements ShouldQueue protected $fingerprint; protected $openpgpsigner; protected $dkimSigner; + protected $encryptedParts; /** * Create a new message instance. @@ -42,7 +44,8 @@ class ForwardEmail extends Mailable implements ShouldQueue */ public function __construct(Alias $alias, EmailData $emailData, Recipient $recipient) { - $fingerprint = $recipient->should_encrypt ? $recipient->fingerprint : null; + $this->encryptedParts = $emailData->encryptedParts ?? null; + $fingerprint = $recipient->should_encrypt && !$this->encryptedParts ? $recipient->fingerprint : null; $this->user = $alias->user; $this->alias = $alias; @@ -120,6 +123,12 @@ class ForwardEmail extends Mailable implements ShouldQueue $message->setId(bin2hex(random_bytes(16)).'@'.$this->alias->domain); + if ($this->encryptedParts) { + $alreadyEncryptedSigner = new AlreadyEncryptedSigner($this->encryptedParts); + + $message->attachSigner($alreadyEncryptedSigner); + } + if ($this->openpgpsigner) { $message->attachSigner($this->openpgpsigner); } elseif ($this->dkimSigner) { // TODO fix issue with failing DKIM signature if message is encrypted diff --git a/app/Mail/ReplyToEmail.php b/app/Mail/ReplyToEmail.php index a546264..156e65d 100644 --- a/app/Mail/ReplyToEmail.php +++ b/app/Mail/ReplyToEmail.php @@ -22,6 +22,7 @@ class ReplyToEmail extends Mailable implements ShouldQueue protected $emailHtml; protected $emailAttachments; protected $dkimSigner; + protected $encryptedParts; /** * Create a new message instance. @@ -36,6 +37,7 @@ class ReplyToEmail extends Mailable implements ShouldQueue $this->emailText = $emailData->text; $this->emailHtml = $emailData->html; $this->emailAttachments = $emailData->attachments; + $this->encryptedParts = $emailData->encryptedParts ?? null; } /** @@ -75,6 +77,12 @@ class ReplyToEmail extends Mailable implements ShouldQueue $message->setId(bin2hex(random_bytes(16)).'@'.$this->alias->domain); + if ($this->encryptedParts) { + $alreadyEncryptedSigner = new AlreadyEncryptedSigner($this->encryptedParts); + + $message->attachSigner($alreadyEncryptedSigner); + } + if ($this->dkimSigner) { $message->attachSigner($this->dkimSigner); } @@ -84,13 +92,6 @@ class ReplyToEmail extends Mailable implements ShouldQueue $email->replyTo($this->alias->email, $fromName); } - // TODO fix issue with replies that are already encrypted. - /* if ($this->emailText) { - $email->text('emails.reply.text')->with([ - 'text' => base64_decode($this->emailText) - ]); - } */ - if ($this->emailHtml) { $email->view('emails.reply.html')->with([ 'html' => base64_decode($this->emailHtml) diff --git a/app/Mail/SendFromEmail.php b/app/Mail/SendFromEmail.php index 589a06e..838f9d8 100644 --- a/app/Mail/SendFromEmail.php +++ b/app/Mail/SendFromEmail.php @@ -4,6 +4,7 @@ namespace App\Mail; use App\Alias; use App\EmailData; +use App\Helpers\AlreadyEncryptedSigner; use App\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -22,6 +23,7 @@ class SendFromEmail extends Mailable implements ShouldQueue protected $emailHtml; protected $emailAttachments; protected $dkimSigner; + protected $encryptedParts; /** * Create a new message instance. @@ -36,6 +38,7 @@ class SendFromEmail extends Mailable implements ShouldQueue $this->emailText = $emailData->text; $this->emailHtml = $emailData->html; $this->emailAttachments = $emailData->attachments; + $this->encryptedParts = $emailData->encryptedParts ?? null; } /** @@ -75,6 +78,12 @@ class SendFromEmail extends Mailable implements ShouldQueue $message->setId(bin2hex(random_bytes(16)).'@'.$this->alias->domain); + if ($this->encryptedParts) { + $alreadyEncryptedSigner = new AlreadyEncryptedSigner($this->encryptedParts); + + $message->attachSigner($alreadyEncryptedSigner); + } + if ($this->dkimSigner) { $message->attachSigner($this->dkimSigner); } diff --git a/app/Providers/CustomMailServiceProvider.php b/app/Providers/CustomMailServiceProvider.php deleted file mode 100644 index 6dbcdc5..0000000 --- a/app/Providers/CustomMailServiceProvider.php +++ /dev/null @@ -1,43 +0,0 @@ -app->singleton('mailer', function ($app) { - $config = $app->make('config')->get('mail'); - - // Once we have create the mailer instance, we will set a container instance - // on the mailer. This allows us to resolve mailer classes via containers - // for maximum testability on said classes instead of passing Closures. - $mailer = new CustomMailer( - $app['view'], - $app['swift.mailer'], - $app['events'] - ); - - if ($app->bound('queue')) { - $mailer->setQueue($app['queue']); - } - - // Next we will set all of the global addresses on this mailer, which allows - // for easy unification of all "from" addresses as well as easy debugging - // of sent messages since they get be sent into a single email address. - foreach (['from', 'reply_to', 'to'] as $type) { - $this->setGlobalAddress($mailer, $config, $type); - } - - return $mailer; - }); - } -} diff --git a/composer.lock b/composer.lock index d78870d..04d413b 100644 --- a/composer.lock +++ b/composer.lock @@ -628,16 +628,16 @@ }, { "name": "egulias/email-validator", - "version": "2.1.15", + "version": "2.1.17", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "e834eea5306d85d67de5a05db5882911d5b29357" + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e834eea5306d85d67de5a05db5882911d5b29357", - "reference": "e834eea5306d85d67de5a05db5882911d5b29357", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", "shasum": "" }, "require": { @@ -682,7 +682,7 @@ "validation", "validator" ], - "time": "2020-01-20T21:40:59+00:00" + "time": "2020-02-13T22:36:52+00:00" }, { "name": "fideloper/proxy", @@ -1269,16 +1269,16 @@ }, { "name": "laravel/framework", - "version": "v6.14.0", + "version": "v6.15.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "9e78f1aeb2c60bd7badcbafc352a9a2c5863c60c" + "reference": "b7c152e3327c03428fb68d5abb63ca8b3eca8422" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/9e78f1aeb2c60bd7badcbafc352a9a2c5863c60c", - "reference": "9e78f1aeb2c60bd7badcbafc352a9a2c5863c60c", + "url": "https://api.github.com/repos/laravel/framework/zipball/b7c152e3327c03428fb68d5abb63ca8b3eca8422", + "reference": "b7c152e3327c03428fb68d5abb63ca8b3eca8422", "shasum": "" }, "require": { @@ -1288,8 +1288,7 @@ "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/commonmark": "^1.1", - "league/commonmark-ext-table": "^2.1", + "league/commonmark": "^1.3", "league/flysystem": "^1.0.8", "monolog/monolog": "^1.12|^2.0", "nesbot/carbon": "^2.0", @@ -1412,20 +1411,20 @@ "framework", "laravel" ], - "time": "2020-02-04T14:38:06+00:00" + "time": "2020-02-12T21:56:14+00:00" }, { "name": "laravel/passport", - "version": "v8.3.1", + "version": "v8.4.0", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "98456cb16efd2ef7b41797e0a8559c9d8b4112f8" + "reference": "c1be259ff85109416e9e81c80fa4d3d611d6398a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/98456cb16efd2ef7b41797e0a8559c9d8b4112f8", - "reference": "98456cb16efd2ef7b41797e0a8559c9d8b4112f8", + "url": "https://api.github.com/repos/laravel/passport/zipball/c1be259ff85109416e9e81c80fa4d3d611d6398a", + "reference": "c1be259ff85109416e9e81c80fa4d3d611d6398a", "shasum": "" }, "require": { @@ -1484,7 +1483,7 @@ "oauth", "passport" ], - "time": "2020-01-29T13:25:24+00:00" + "time": "2020-02-12T14:34:02+00:00" }, { "name": "laravel/tinker", @@ -1678,71 +1677,6 @@ ], "time": "2020-02-08T23:42:03+00:00" }, - { - "name": "league/commonmark-ext-table", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark-ext-table.git", - "reference": "3228888ea69636e855efcf6636ff8e6316933fe7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark-ext-table/zipball/3228888ea69636e855efcf6636ff8e6316933fe7", - "reference": "3228888ea69636e855efcf6636ff8e6316933fe7", - "shasum": "" - }, - "require": { - "league/commonmark": "~0.19.3|^1.0", - "php": "^7.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpstan/phpstan": "~0.11", - "phpunit/phpunit": "^7.0|^8.0", - "symfony/var-dumper": "^4.0", - "vimeo/psalm": "^3.0" - }, - "type": "commonmark-extension", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\Ext\\Table\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Martin HasoĊˆ", - "email": "martin.hason@gmail.com" - }, - { - "name": "Webuni s.r.o.", - "homepage": "https://www.webuni.cz" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Table extension for league/commonmark", - "homepage": "https://github.com/thephpleague/commonmark-ext-table", - "keywords": [ - "commonmark", - "extension", - "markdown", - "table" - ], - "time": "2019-09-26T13:28:33+00:00" - }, { "name": "league/event", "version": "2.2.0", @@ -2106,16 +2040,16 @@ }, { "name": "nesbot/carbon", - "version": "2.29.1", + "version": "2.30.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "e509be5bf2d703390e69e14496d9a1168452b0a2" + "reference": "912dff66d2690ca66abddb9b291a1df5f371d3b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e509be5bf2d703390e69e14496d9a1168452b0a2", - "reference": "e509be5bf2d703390e69e14496d9a1168452b0a2", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/912dff66d2690ca66abddb9b291a1df5f371d3b4", + "reference": "912dff66d2690ca66abddb9b291a1df5f371d3b4", "shasum": "" }, "require": { @@ -2172,7 +2106,7 @@ "datetime", "time" ], - "time": "2020-01-21T09:36:43+00:00" + "time": "2020-02-07T15:25:46+00:00" }, { "name": "nikic/php-parser", @@ -3994,16 +3928,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", "shasum": "" }, "require": { @@ -4015,7 +3949,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4048,20 +3982,20 @@ "polyfill", "portable" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36" + "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/a019efccc03f1a335af6b4f20c30f5ea8060be36", - "reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/926832ce51059bb58211b7b2080a88e0c3b5328e", + "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e", "shasum": "" }, "require": { @@ -4073,7 +4007,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4107,26 +4041,26 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46" + "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6f9c239e61e1b0c9229a28ff89a812dc449c3d46", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", + "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", "shasum": "" }, "require": { "php": ">=5.3.3", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" + "symfony/polyfill-php72": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -4134,7 +4068,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4169,20 +4103,20 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-17T12:01:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" + "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", + "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", "shasum": "" }, "require": { @@ -4194,7 +4128,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4228,20 +4162,20 @@ "portable", "shim" ], - "time": "2019-11-27T14:18:11+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-php56", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4" + "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/53dd1cdf3cb986893ccf2b96665b25b3abb384f4", - "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/16ec91cb06998b609501b55b7177b7d7c02badb3", + "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3", "shasum": "" }, "require": { @@ -4251,7 +4185,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4284,20 +4218,20 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038" + "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/66fea50f6cb37a35eea048d75a7d99a45b586038", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", + "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", "shasum": "" }, "require": { @@ -4306,7 +4240,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4339,20 +4273,20 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f" + "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", + "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", "shasum": "" }, "require": { @@ -4361,7 +4295,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4397,20 +4331,20 @@ "portable", "shim" ], - "time": "2019-11-27T16:25:15+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-util", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-util.git", - "reference": "964a67f293b66b95883a5ed918a65354fcd2258f" + "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/964a67f293b66b95883a5ed918a65354fcd2258f", - "reference": "964a67f293b66b95883a5ed918a65354fcd2258f", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ba3cfcea6d0192cae46c62041f61cbb704b526d3", + "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3", "shasum": "" }, "require": { @@ -4419,7 +4353,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -4449,7 +4383,7 @@ "polyfill", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/process", @@ -7392,16 +7326,16 @@ }, { "name": "symfony/polyfill-php70", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "af23c7bb26a73b850840823662dda371484926c4" + "reference": "419c4940024c30ccc033650373a1fe13890d3255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/af23c7bb26a73b850840823662dda371484926c4", - "reference": "af23c7bb26a73b850840823662dda371484926c4", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/419c4940024c30ccc033650373a1fe13890d3255", + "reference": "419c4940024c30ccc033650373a1fe13890d3255", "shasum": "" }, "require": { @@ -7411,7 +7345,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -7447,7 +7381,7 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/stopwatch", @@ -7541,16 +7475,16 @@ }, { "name": "webmozart/assert", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", + "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", "shasum": "" }, "require": { @@ -7585,7 +7519,7 @@ "check", "validate" ], - "time": "2019-11-24T13:36:37+00:00" + "time": "2020-02-14T12:15:55+00:00" } ], "aliases": [], diff --git a/config/app.php b/config/app.php index 0e65433..0e25767 100644 --- a/config/app.php +++ b/config/app.php @@ -175,7 +175,6 @@ return [ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\HelperServiceProvider::class, - App\Providers\CustomMailServiceProvider::class, ], diff --git a/tests/emails/email_reply_encrypted.eml b/tests/emails/email_reply_encrypted.eml index 80051b3..ffda0ec 100644 --- a/tests/emails/email_reply_encrypted.eml +++ b/tests/emails/email_reply_encrypted.eml @@ -1,6 +1,6 @@ Date: Wed, 20 Feb 2019 15:00:00 +0100 (CET) From: Will -To: contact@ebay.com +To: Subject: RE: Test Email In-Reply-To: <9f2ada5308f1a3f88515a370504a66b3@swift.generated> Content-Type: multipart/encrypted; protocol="application/pgp-encrypted"; boundary="----=_Part_10031_1199410393.1550677940425" @@ -19,39 +19,39 @@ Content-Disposition: inline; filename="encrypted.asc" -----BEGIN PGP MESSAGE----- -hQGMA61U1XgYVZGqAQwAwsZnzUWMqibcgyAemgMU+vGl6v9fHt/HNz0cYH9Hve0F -geE57J7oEkujnA47numZ4/MxvV0Q+0OVc0ZNcZ9Ghah8AWHZ5p6Q838fDy2Iw7L4 -KOl1hT1u6h9t0cZxXWW2CqjAITYsIk/zIVcHZa+qWSq2mr8HYTAo7dlqq/Mn5Zss -OFWKsNXzFGEkIP9w3HLiRxuE7CEeY/oDZFnZKXFalTye8XNK43ioujEPGc3v5ImX -8ZW2C1TIy319qpMXJ3/CE7rbbq808cT5qD0V9c92/LDrBK/3liMStmYBryPexWx2 -svv3dbZqNXPY4WonSM5kg99vDv96TiHbGKwL2Wnjm6tKKmaGSOms0IQ+MCNlOvaq -2+kfz1LAbdTdI6aWQ5xB08VyuowL8+3hUrNoIjxGDhD7ZzslAQ8WUo6i4jRwuUvD -1IMhF+cj6zMg+c9CYpUBo6vVYFDHAi+wQKxqmjaZvSeiOLvsGu2bDxFIrjdrbSi0 -M0TByqjDciEQCMiqD+YqhQGMA0sUUxmvUIjDAQv/b111j2sXLZVbtHYOIDRkzSCo -gbHrHo+D5YF6zsnt5tLc/w0IXeWEXkPsyWwlxMMBjdJREDrhjye0LpFf65bVkYc9 -KF0sdljpAnoW4PkmdqpiBY5D2JPRZxvLoFgYsnZJCnDNXE27909sPmewid8gsI4C -GRe6jhfcX8NqQN0DN6TMRhLtFa+2RHf2s/aQa1jLtYSJ30sXNRjP6G+q7dHbGAst -l0H2qNJVTuvQDsBv+AFsBw0YuR0fyirwCMjovDRp9Da6MpefplUmZ7qElxCJdUwI -1g2IUwC1OkJExgShf54IMSPoJ+Uiaj/yAD+d/3dpEbSvqudzmnWQTtqsMdoMELhj -2NoWqhUZbqEzJdNQN4VlXKtkzYY8LM9mdy9DIJvaV1GaGt1rFTLqqjS/jxse9zzf -wlIqy6/sR4zcueGsfCVaHTGmXmRTByNVgOBpC/RPodiYUAfKY/WlKPIxCgMeiY55 -fNwuhy6Zbf20EoQajQgaqnQLWBXVdsiR/W2wj62Z0ukBRDBf7fOAi9raHcHABagT -nXHCUdDXaok8H+qu0954tE0c/2lHGSwRpC1zCvLVrSaV+If+oEqCSjrBpECzwXlA -8xaY0AWG82C3pwamKxfI6yIH6qItr5IUsfvr6P4xfPt2FAopPUzmK43lyFaHQ5pm -kY/RwCahNyqacRizLNRy4Y84gjS2olm1Q/ojTTHXwrXl7OcAJ1yFgk1u+GYnPPo2 -lURrsM9CSdi1O+6E3ujtIA5vRpW0xc6zRa95QrvuGq/xkXMyzWjFQIWvrvBahBu9 -YmSaYOD3GBLqlSbnn5kzr29Vju9eZfc0vKiw8RREmAIVrqPt47xfJ8Eduvq5AsUd -Mk47AEkw0+qg/UnzMuBR31fNeSdoxPNEdTZClhvfIxiyiTXqPnpnRboNxzkYPFQC -cdhcDaS0Jd1F9NKFiaOPn7tHBSSucq1pfuEnansTT144qiVjL4p1JBCuV3l6PsA5 -DKBtscBIFmKOKEfh0tj9frhwbe5L8WoC/4uwKSG6C5FFljaTTngxpBS8iAwygm5T -MZoCgaeLkLqmzM3BYtqANTRh/14SbtOt0lQM2EsxLNhbrifEomhfmlNqarjCloz/ -hNmv7w6BcePMIpeqKk7s2OtWenmJxgtOZ3sUY7VRT2anuTlgZBfA7Ss5GEHRBl7Y -uw6C44TOf8f4L7kHEKyUQMARYpAOzlG3Z7jdqwe7n/fc1W0kpomT4qUvXWnJ7Zla -O2Rmfc7dVNhMwnE78P0y+FeodQdbS4hVFbe6PTzOUZs+35HnwSDXSgfCTWwtVM05 -Eqw9OHo28FyGlX44kbBlr8fxPfhQxJYLRZRvnlBx0nORxyEUgzOUeb53kyoxtRIn -epCSKykOfDfaMmQC4Lf8h/ODM6Xm7ckRgw1p7SlBSarWXILX1RHGIWhAu0BNvhTc -FaCezBnAoxvqcTGNGxR17B2iDhpOZox8hcQRnqiftKyBoCQ= -=ldnW +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 +z/x1RGWQTcq5LANBKBUoYQqiScidMstiSX0= +=3dtw -----END PGP MESSAGE----- ------=_Part_10031_1199410393.1550677940425--