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.2.3-70-g09d2