mirror of
https://github.com/flarum/framework.git
synced 2025-02-06 16:51:02 +08:00
Use a custom service provider for email configuration
This commit is contained in:
parent
8e37c2b8d8
commit
9d3f2b1c49
|
@ -40,7 +40,6 @@ use Illuminate\Contracts\Container\Container;
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
use Illuminate\Filesystem\FilesystemServiceProvider;
|
use Illuminate\Filesystem\FilesystemServiceProvider;
|
||||||
use Illuminate\Hashing\HashServiceProvider;
|
use Illuminate\Hashing\HashServiceProvider;
|
||||||
use Illuminate\Mail\MailServiceProvider;
|
|
||||||
use Illuminate\Validation\ValidationServiceProvider;
|
use Illuminate\Validation\ValidationServiceProvider;
|
||||||
use Illuminate\View\ViewServiceProvider;
|
use Illuminate\View\ViewServiceProvider;
|
||||||
use Monolog\Formatter\LineFormatter;
|
use Monolog\Formatter\LineFormatter;
|
||||||
|
@ -118,18 +117,6 @@ class InstalledSite implements SiteInterface
|
||||||
$laravel->register(MailServiceProvider::class);
|
$laravel->register(MailServiceProvider::class);
|
||||||
$laravel->register(ViewServiceProvider::class);
|
$laravel->register(ViewServiceProvider::class);
|
||||||
$laravel->register(ValidationServiceProvider::class);
|
$laravel->register(ValidationServiceProvider::class);
|
||||||
|
|
||||||
$settings = $laravel->make(SettingsRepositoryInterface::class);
|
|
||||||
|
|
||||||
$config->set('mail.driver', $settings->get('mail_driver'));
|
|
||||||
$config->set('mail.host', $settings->get('mail_host'));
|
|
||||||
$config->set('mail.port', $settings->get('mail_port'));
|
|
||||||
$config->set('mail.from.address', $settings->get('mail_from'));
|
|
||||||
$config->set('mail.from.name', $settings->get('forum_title'));
|
|
||||||
$config->set('mail.encryption', $settings->get('mail_encryption'));
|
|
||||||
$config->set('mail.username', $settings->get('mail_username'));
|
|
||||||
$config->set('mail.password', $settings->get('mail_password'));
|
|
||||||
|
|
||||||
$laravel->register(DiscussionServiceProvider::class);
|
$laravel->register(DiscussionServiceProvider::class);
|
||||||
$laravel->register(FormatterServiceProvider::class);
|
$laravel->register(FormatterServiceProvider::class);
|
||||||
$laravel->register(FrontendServiceProvider::class);
|
$laravel->register(FrontendServiceProvider::class);
|
||||||
|
|
79
framework/core/src/Foundation/MailServiceProvider.php
Normal file
79
framework/core/src/Foundation/MailServiceProvider.php
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Flarum.
|
||||||
|
*
|
||||||
|
* (c) Toby Zerner <toby.zerner@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Flarum\Foundation;
|
||||||
|
|
||||||
|
use Flarum\Settings\SettingsRepositoryInterface;
|
||||||
|
use Illuminate\Mail\Mailer;
|
||||||
|
use Illuminate\Mail\Transport\LogTransport;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Swift_Mailer;
|
||||||
|
use Swift_SendmailTransport;
|
||||||
|
use Swift_SmtpTransport;
|
||||||
|
use Swift_Transport;
|
||||||
|
|
||||||
|
class MailServiceProvider extends AbstractServiceProvider
|
||||||
|
{
|
||||||
|
public function register()
|
||||||
|
{
|
||||||
|
$this->app->singleton('swift.mailer', function ($app) {
|
||||||
|
$settings = $app->make(SettingsRepositoryInterface::class);
|
||||||
|
|
||||||
|
return new Swift_Mailer(
|
||||||
|
$this->buildTransport($settings)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->app->singleton('mailer', function ($app) {
|
||||||
|
$mailer = new Mailer(
|
||||||
|
$app['view'], $app['swift.mailer'], $app['events']
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($app->bound('queue')) {
|
||||||
|
$mailer->setQueue($app->make('queue'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$settings = $app->make(SettingsRepositoryInterface::class);
|
||||||
|
$mailer->alwaysFrom($settings->get('mail_from'), $settings->get('forum_title'));
|
||||||
|
|
||||||
|
return $mailer;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildTransport(SettingsRepositoryInterface $settings): Swift_Transport
|
||||||
|
{
|
||||||
|
switch ($settings->get('mail_driver')) {
|
||||||
|
case 'smtp':
|
||||||
|
return $this->buildSmtpTransport($settings);
|
||||||
|
case 'mail':
|
||||||
|
return new Swift_SendmailTransport;
|
||||||
|
case 'log':
|
||||||
|
return new LogTransport($this->app->make(LoggerInterface::class));
|
||||||
|
default:
|
||||||
|
throw new InvalidArgumentException('Invalid mail driver configuration');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildSmtpTransport(SettingsRepositoryInterface $settings): Swift_Transport
|
||||||
|
{
|
||||||
|
$transport = new Swift_SmtpTransport(
|
||||||
|
$settings->get('mail_host'),
|
||||||
|
$settings->get('mail_port'),
|
||||||
|
$settings->get('mail_encryption')
|
||||||
|
);
|
||||||
|
|
||||||
|
$transport->setUsername($settings->get('mail_username'));
|
||||||
|
$transport->setPassword($settings->get('mail_password'));
|
||||||
|
|
||||||
|
return $transport;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user