Send emails through the queue

This commit is contained in:
Alexander Skvortsov 2020-03-28 18:52:00 -04:00 committed by Daniël Klabbers
parent 857fd95b5e
commit 03a4997a1c
5 changed files with 71 additions and 43 deletions

View File

@ -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;
}

View File

@ -0,0 +1,36 @@
<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\Mail\Job;
use Flarum\Queue\AbstractJob;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Mail\Message;
class SendRawEmailJob extends AbstractJob
{
private $email;
private $subject;
private $body;
public function __construct(string $email, string $subject, string $body)
{
$this->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);
});
}
}

View File

@ -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));
}
/**

View File

@ -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;
}

View File

@ -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));
}
/**