From 01e9c22695a3e495f07ab445750221af72e09fe4 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Wed, 5 Sep 2018 13:40:03 +0200 Subject: Implemented mailing abstraction Closes #434 --- src/Mail/MailerServiceProvider.php | 86 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/Mail/MailerServiceProvider.php (limited to 'src/Mail/MailerServiceProvider.php') diff --git a/src/Mail/MailerServiceProvider.php b/src/Mail/MailerServiceProvider.php new file mode 100644 index 00000000..70cb0d30 --- /dev/null +++ b/src/Mail/MailerServiceProvider.php @@ -0,0 +1,86 @@ +app->get('config'); + $mailConfig = $config->get('email'); + + $transport = $this->getTransport($mailConfig['driver'], $mailConfig); + $this->app->instance(Transport::class, $transport); + $this->app->instance('mailer.transport', $transport); + + /** @var SwiftMailer $swiftMailer */ + $swiftMailer = $this->app->make(SwiftMailer::class); + $this->app->instance(SwiftMailer::class, $swiftMailer); + $this->app->instance('mailer.swift', $swiftMailer); + + /** @var Mailer $mailer */ + $mailer = $this->app->make(EngelsystemMailer::class); + $mailer->setFromAddress($mailConfig['from']['address']); + if (!empty($mailConfig['from']['name'])) { + $mailer->setFromName($mailConfig['from']['name']); + } + + $this->app->instance(EngelsystemMailer::class, $mailer); + $this->app->instance(Mailer::class, $mailer); + $this->app->instance('mailer', $mailer); + } + + /** + * @param string $transport + * @param array $config + * @return Transport + */ + protected function getTransport($transport, $config) + { + switch ($transport) { + case 'log': + return $this->app->make(LogTransport::class); + case 'mail': + case 'sendmail': + return $this->app->make(SendmailTransport::class, ['command' => $config['sendmail']]); + case 'smtp': + return $this->getSmtpTransport($config); + } + + throw new InvalidArgumentException(sprintf('Mail driver "%s" not found', $transport)); + } + + /** + * @param array $config + * @return SmtpTransport + */ + protected function getSmtpTransport(array $config) + { + /** @var SmtpTransport $transport */ + $transport = $this->app->make(SmtpTransport::class, [ + 'host' => $config['host'], + 'port' => $config['port'], + 'security' => $config['encryption'], + ]); + + if ($config['username']) { + $transport->setUsername($config['username']); + } + + if ($config['password']) { + $transport->setPassword($config['password']); + } + + return $transport; + } +} -- cgit v1.3.1 From d36de2d26f5af76d5d4f34f8620694c6d0368983 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Tue, 11 Sep 2018 16:35:28 +0200 Subject: Quickfix for problems with the SmtpTransport --- src/Mail/MailerServiceProvider.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/Mail/MailerServiceProvider.php') diff --git a/src/Mail/MailerServiceProvider.php b/src/Mail/MailerServiceProvider.php index 70cb0d30..989fee8f 100644 --- a/src/Mail/MailerServiceProvider.php +++ b/src/Mail/MailerServiceProvider.php @@ -68,9 +68,12 @@ class MailerServiceProvider extends ServiceProvider { /** @var SmtpTransport $transport */ $transport = $this->app->make(SmtpTransport::class, [ - 'host' => $config['host'], - 'port' => $config['port'], - 'security' => $config['encryption'], + 'host' => $config['host'], + 'port' => $config['port'], + 'encryption' => $config['encryption'], + // TODO: The security variable should be removed in the future + // https://github.com/swiftmailer/swiftmailer/commit/d3d6a98ab7dc155a04eb08273db7cd34606e7b5e#commitcomment-30462876 + 'security' => $config['encryption'], ]); if ($config['username']) { -- cgit v1.3.1