app->get('config'); $mailConfig = $config->get('email'); $transport = $this->getTransport($mailConfig['driver'], $mailConfig); $this->app->instance(TransportInterface::class, $transport); $this->app->instance('mailer.transport', $transport); /** @var SymfonyMailer $symfonyMailer */ $symfonyMailer = $this->app->make(SymfonyMailer::class); $this->app->instance(SymfonyMailer::class, $symfonyMailer); $this->app->instance(MailerInterface::class, $symfonyMailer); $this->app->instance('mailer.symfony', $symfonyMailer); /** @var EngelsystemMailer $mailer */ $mailer = $this->app->make(EngelsystemMailer::class); $mailer->setFromAddress($mailConfig['from']['address']); $mailer->setSubjectPrefix($config->get('app_name')); 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 TransportInterface */ 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'] ?? null]); case 'smtp': return $this->getSmtpTransport($config); default: return Transport::fromDsn($transport ?? ''); } } /** * @param array $config * @return SmtpTransport */ protected function getSmtpTransport(array $config) { /** @var EsmtpTransport $transport */ $transport = $this->app->make(EsmtpTransport::class, [ 'host' => $config['host'] ?? 'localhost', 'port' => $config['port'] ?? 0, 'tls' => $config['tls'] ?? null, 'logger' => null, ]); if (!empty($config['username'])) { $transport->setUsername($config['username']); } if (!empty($config['password'])) { $transport->setPassword($config['password']); } return $transport; } }