61 lines
1.6 KiB
Elixir
61 lines
1.6 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
|
# 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 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
|
|
PleromaJobQueue.enqueue(:mailer, __MODULE__, [:deliver_async, email, 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
|