[#1149] Oban mailer job. Adjusted tests.

This commit is contained in:
Ivan Tashkinov 2019-08-14 21:42:21 +03:00
commit a180c1360e
7 changed files with 35 additions and 1 deletions

View file

@ -233,6 +233,7 @@ defmodule Pleroma.Application do
defp after_supervisor_start do
with digest_config <- Application.get_env(:pleroma, :email_notifications)[:digest],
true <- digest_config[:active] do
# TODO: consider replacing with `quantum` scheduler
PleromaJobQueue.schedule(
digest_config[:schedule],
:digest_emails,

View file

@ -9,6 +9,8 @@ defmodule Pleroma.Emails.Mailer do
The module contains functions to delivery email using Swoosh.Mailer.
"""
alias Pleroma.Repo
alias Pleroma.Workers.Mailer, as: MailerWorker
alias Swoosh.DeliveryError
@otp_app :pleroma
@ -17,9 +19,18 @@ defmodule Pleroma.Emails.Mailer do
@spec enabled?() :: boolean()
def enabled?, do: Pleroma.Config.get([__MODULE__, :enabled])
defdelegate worker_args(queue), to: Pleroma.Workers.Helper
@doc "add email to queue"
def deliver_async(email, config \\ []) do
PleromaJobQueue.enqueue(:mailer, __MODULE__, [:deliver_async, email, config])
encoded_email =
email
|> :erlang.term_to_binary()
|> Base.encode64()
%{"op" => "email", "encoded_email" => encoded_email, "config" => config}
|> MailerWorker.new(worker_args(:mailer))
|> Repo.insert()
end
@doc "callback to perform send email from queue"

View file

@ -11,6 +11,15 @@ defmodule Pleroma.Workers.Mailer do
max_attempts: Pleroma.Config.get([:workers, :retries, :compile_time_default])
@impl Oban.Worker
def perform(%{"op" => "email", "encoded_email" => encoded_email, "config" => config}) do
email =
encoded_email
|> Base.decode64!()
|> :erlang.binary_to_term()
Pleroma.Emails.Mailer.deliver(email, config)
end
def perform(%{"op" => "digest_email", "user_id" => user_id}) do
user = User.get_by_id(user_id)
Pleroma.DigestEmailWorker.perform(user)