60 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			60 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
 | 
