X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Femails%2Fmailer.ex;h=eb96f2e8b7b81b4d0557a59334411aa7181eb406;hb=b923842e96e821afeb7bbfa0d098b9c5698281c5;hp=14ed32ea87a8724d29cbe2f8277ed1498e873dc1;hpb=10c156d98fee44444ed6d1366e615ddcdb2ee68a;p=akkoma diff --git a/lib/pleroma/emails/mailer.ex b/lib/pleroma/emails/mailer.ex index 14ed32ea8..eb96f2e8b 100644 --- a/lib/pleroma/emails/mailer.ex +++ b/lib/pleroma/emails/mailer.ex @@ -1,3 +1,66 @@ -defmodule Pleroma.Mailer do - use Swoosh.Mailer, otp_app: :pleroma +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Emails.Mailer do + @moduledoc """ + Defines the Pleroma mailer. + + The module contains functions to delivery email using Swoosh.Mailer. + """ + + alias Pleroma.Workers.MailerWorker + alias Swoosh.DeliveryError + + @otp_app :pleroma + @mailer_config [otp: :pleroma] + + @spec enabled?() :: boolean() + def enabled?, do: Pleroma.Config.get([__MODULE__, :enabled]) + + @doc "add email to queue" + def deliver_async(email, config \\ []) do + encoded_email = + email + |> :erlang.term_to_binary() + |> Base.encode64() + + MailerWorker.enqueue("email", %{"encoded_email" => encoded_email, "config" => config}) + end + + @doc "callback to perform send email from queue" + def perform(:deliver_async, email, config), do: deliver(email, config) + + @spec deliver(Swoosh.Email.t(), Keyword.t()) :: {:ok, term} | {:error, term} + def deliver(email, config \\ []) + + def deliver(email, config) do + case enabled?() do + true -> Swoosh.Mailer.deliver(email, parse_config(config)) + false -> {:error, :deliveries_disabled} + end + end + + @spec deliver!(Swoosh.Email.t(), Keyword.t()) :: term | no_return + def deliver!(email, config \\ []) + + def deliver!(email, config) do + case deliver(email, config) do + {:ok, result} -> result + {:error, reason} -> raise DeliveryError, reason: reason + end + end + + @on_load :validate_dependency + + @doc false + def validate_dependency do + parse_config([]) + |> Keyword.get(:adapter) + |> Swoosh.Mailer.validate_dependency() + end + + defp parse_config(config) do + Swoosh.Mailer.parse_config(@otp_app, __MODULE__, @mailer_config, config) + end end