From ca32879e1ece05d65e0899c9216b934ec18f6a45 Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Sat, 28 Mar 2020 18:52:00 -0400 Subject: [PATCH] Send emails through the queue --- .../SendConfirmationEmailController.php | 20 +++++------ .../core/src/Mail/Job/SendRawEmailJob.php | 36 +++++++++++++++++++ .../core/src/User/AccountActivationMailer.php | 20 +++++------ .../Command/RequestPasswordResetHandler.php | 20 +++++------ .../core/src/User/EmailConfirmationMailer.php | 18 +++++----- 5 files changed, 71 insertions(+), 43 deletions(-) create mode 100644 framework/core/src/Mail/Job/SendRawEmailJob.php diff --git a/framework/core/src/Api/Controller/SendConfirmationEmailController.php b/framework/core/src/Api/Controller/SendConfirmationEmailController.php index 5912ad275..5e9cba590 100644 --- a/framework/core/src/Api/Controller/SendConfirmationEmailController.php +++ b/framework/core/src/Api/Controller/SendConfirmationEmailController.php @@ -10,12 +10,12 @@ namespace Flarum\Api\Controller; use Flarum\Http\UrlGenerator; +use Flarum\Mail\Job\SendRawEmailJob; use Flarum\Settings\SettingsRepositoryInterface; use Flarum\User\AssertPermissionTrait; use Flarum\User\EmailToken; use Flarum\User\Exception\PermissionDeniedException; -use Illuminate\Contracts\Mail\Mailer; -use Illuminate\Mail\Message; +use Illuminate\Contracts\Queue\Queue; use Illuminate\Support\Arr; use Laminas\Diactoros\Response\EmptyResponse; use Psr\Http\Message\ResponseInterface; @@ -33,9 +33,9 @@ class SendConfirmationEmailController implements RequestHandlerInterface protected $settings; /** - * @var Mailer + * @var Queue */ - protected $mailer; + protected $queue; /** * @var UrlGenerator @@ -49,14 +49,14 @@ class SendConfirmationEmailController implements RequestHandlerInterface /** * @param \Flarum\Settings\SettingsRepositoryInterface $settings - * @param Mailer $mailer + * @param Queue $queue * @param UrlGenerator $url * @param TranslatorInterface $translator */ - public function __construct(SettingsRepositoryInterface $settings, Mailer $mailer, UrlGenerator $url, TranslatorInterface $translator) + public function __construct(SettingsRepositoryInterface $settings, Queue $queue, UrlGenerator $url, TranslatorInterface $translator) { $this->settings = $settings; - $this->mailer = $mailer; + $this->queue = $queue; $this->url = $url; $this->translator = $translator; } @@ -85,11 +85,9 @@ class SendConfirmationEmailController implements RequestHandlerInterface ]; $body = $this->translator->trans('core.email.activate_account.body', $data); + $subject = $this->translator->trans('core.email.activate_account.subject'); - $this->mailer->raw($body, function (Message $message) use ($actor) { - $message->to($actor->email); - $message->subject($this->translator->trans('core.email.activate_account.subject')); - }); + $this->queue->push(new SendRawEmailJob($actor->email, $subject, $body)); return new EmptyResponse; } diff --git a/framework/core/src/Mail/Job/SendRawEmailJob.php b/framework/core/src/Mail/Job/SendRawEmailJob.php new file mode 100644 index 000000000..9eebc35e6 --- /dev/null +++ b/framework/core/src/Mail/Job/SendRawEmailJob.php @@ -0,0 +1,36 @@ +email = $email; + $this->subject = $subject; + $this->body = $body; + } + + public function handle(Mailer $mailer) + { + $mailer->raw($this->body, function (Message $message) { + $message->to($this->email); + $message->subject($this->subject); + }); + } +} diff --git a/framework/core/src/User/AccountActivationMailer.php b/framework/core/src/User/AccountActivationMailer.php index 577369516..a07f3e6de 100644 --- a/framework/core/src/User/AccountActivationMailer.php +++ b/framework/core/src/User/AccountActivationMailer.php @@ -10,11 +10,11 @@ namespace Flarum\User; use Flarum\Http\UrlGenerator; +use Flarum\Mail\Job\SendRawEmailJob; use Flarum\Settings\SettingsRepositoryInterface; use Flarum\User\Event\Registered; -use Illuminate\Contracts\Mail\Mailer; +use Illuminate\Contracts\Queue\Queue; use Illuminate\Contracts\Translation\Translator; -use Illuminate\Mail\Message; class AccountActivationMailer { @@ -24,9 +24,9 @@ class AccountActivationMailer protected $settings; /** - * @var Mailer + * @var Queue */ - protected $mailer; + protected $queue; /** * @var UrlGenerator @@ -40,14 +40,14 @@ class AccountActivationMailer /** * @param \Flarum\Settings\SettingsRepositoryInterface $settings - * @param Mailer $mailer + * @param Queue $queue * @param UrlGenerator $url * @param Translator $translator */ - public function __construct(SettingsRepositoryInterface $settings, Mailer $mailer, UrlGenerator $url, Translator $translator) + public function __construct(SettingsRepositoryInterface $settings, Queue $queue, UrlGenerator $url, Translator $translator) { $this->settings = $settings; - $this->mailer = $mailer; + $this->queue = $queue; $this->url = $url; $this->translator = $translator; } @@ -63,11 +63,9 @@ class AccountActivationMailer $data = $this->getEmailData($user, $user->email); $body = $this->translator->trans('core.email.activate_account.body', $data); + $subject = '['.$data['{forum}'].'] '.$this->translator->trans('core.email.activate_account.subject'); - $this->mailer->raw($body, function (Message $message) use ($user, $data) { - $message->to($user->email); - $message->subject('['.$data['{forum}'].'] '.$this->translator->trans('core.email.activate_account.subject')); - }); + $this->queue->push(new SendRawEmailJob($user->email, $subject, $body)); } /** diff --git a/framework/core/src/User/Command/RequestPasswordResetHandler.php b/framework/core/src/User/Command/RequestPasswordResetHandler.php index 13ad69b6a..b18e927cc 100644 --- a/framework/core/src/User/Command/RequestPasswordResetHandler.php +++ b/framework/core/src/User/Command/RequestPasswordResetHandler.php @@ -10,14 +10,14 @@ namespace Flarum\User\Command; use Flarum\Http\UrlGenerator; +use Flarum\Mail\Job\SendRawEmailJob; use Flarum\Settings\SettingsRepositoryInterface; use Flarum\User\PasswordToken; use Flarum\User\UserRepository; -use Illuminate\Contracts\Mail\Mailer; +use Illuminate\Contracts\Queue\Queue; use Illuminate\Contracts\Translation\Translator; use Illuminate\Contracts\Validation\Factory; use Illuminate\Database\Eloquent\ModelNotFoundException; -use Illuminate\Mail\Message; use Illuminate\Validation\ValidationException; class RequestPasswordResetHandler @@ -33,9 +33,9 @@ class RequestPasswordResetHandler protected $settings; /** - * @var Mailer + * @var Queue */ - protected $mailer; + protected $queue; /** * @var UrlGenerator @@ -55,7 +55,7 @@ class RequestPasswordResetHandler /** * @param UserRepository $users * @param SettingsRepositoryInterface $settings - * @param Mailer $mailer + * @param Queue $queue * @param UrlGenerator $url * @param Translator $translator * @param Factory $validatorFactory @@ -63,14 +63,14 @@ class RequestPasswordResetHandler public function __construct( UserRepository $users, SettingsRepositoryInterface $settings, - Mailer $mailer, + Queue $queue, UrlGenerator $url, Translator $translator, Factory $validatorFactory ) { $this->users = $users; $this->settings = $settings; - $this->mailer = $mailer; + $this->queue = $queue; $this->url = $url; $this->translator = $translator; $this->validatorFactory = $validatorFactory; @@ -110,11 +110,9 @@ class RequestPasswordResetHandler ]; $body = $this->translator->trans('core.email.reset_password.body', $data); + $subject = '['.$data['{forum}'].'] '.$this->translator->trans('core.email.reset_password.subject'); - $this->mailer->raw($body, function (Message $message) use ($user, $data) { - $message->to($user->email); - $message->subject('['.$data['{forum}'].'] '.$this->translator->trans('core.email.reset_password.subject')); - }); + $this->queue->push(new SendRawEmailJob($user->email, $subject, $body)); return $user; } diff --git a/framework/core/src/User/EmailConfirmationMailer.php b/framework/core/src/User/EmailConfirmationMailer.php index 827c1a92e..5d35b95ed 100644 --- a/framework/core/src/User/EmailConfirmationMailer.php +++ b/framework/core/src/User/EmailConfirmationMailer.php @@ -10,11 +10,11 @@ namespace Flarum\User; use Flarum\Http\UrlGenerator; +use Flarum\Mail\Job\SendRawEmailJob; use Flarum\Settings\SettingsRepositoryInterface; use Flarum\User\Event\EmailChangeRequested; -use Illuminate\Contracts\Mail\Mailer; +use Illuminate\Contracts\Queue\Queue; use Illuminate\Contracts\Translation\Translator; -use Illuminate\Mail\Message; class EmailConfirmationMailer { @@ -24,9 +24,9 @@ class EmailConfirmationMailer protected $settings; /** - * @var Mailer + * @var Queue */ - protected $mailer; + protected $queue; /** * @var UrlGenerator @@ -38,10 +38,10 @@ class EmailConfirmationMailer */ protected $translator; - public function __construct(SettingsRepositoryInterface $settings, Mailer $mailer, UrlGenerator $url, Translator $translator) + public function __construct(SettingsRepositoryInterface $settings, Queue $queue, UrlGenerator $url, Translator $translator) { $this->settings = $settings; - $this->mailer = $mailer; + $this->queue = $queue; $this->url = $url; $this->translator = $translator; } @@ -52,11 +52,9 @@ class EmailConfirmationMailer $data = $this->getEmailData($event->user, $email); $body = $this->translator->trans('core.email.confirm_email.body', $data); + $subject = '['.$data['{forum}'].'] '.$this->translator->trans('core.email.confirm_email.subject'); - $this->mailer->raw($body, function (Message $message) use ($email, $data) { - $message->to($email); - $message->subject('['.$data['{forum}'].'] '.$this->translator->trans('core.email.confirm_email.subject')); - }); + $this->queue->push(new SendRawEmailJob($email, $subject, $body)); } /**