logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

mailer.ex (2035B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Emails.Mailer do
  5. @moduledoc """
  6. Defines the Pleroma mailer.
  7. The module contains functions to delivery email using Swoosh.Mailer.
  8. """
  9. alias Pleroma.Workers.MailerWorker
  10. alias Swoosh.DeliveryError
  11. @otp_app :pleroma
  12. @mailer_config [otp: :pleroma]
  13. @spec enabled?() :: boolean()
  14. def enabled?, do: Pleroma.Config.get([__MODULE__, :enabled])
  15. @doc "add email to queue"
  16. def deliver_async(email, config \\ []) do
  17. encoded_email =
  18. email
  19. |> :erlang.term_to_binary()
  20. |> Base.encode64()
  21. MailerWorker.enqueue("email", %{"encoded_email" => encoded_email, "config" => config})
  22. end
  23. @doc "callback to perform send email from queue"
  24. def perform(:deliver_async, email, config), do: deliver(email, config)
  25. @spec deliver(Swoosh.Email.t(), Keyword.t()) :: {:ok, term} | {:error, term}
  26. def deliver(email, config \\ [])
  27. def deliver(email, config) do
  28. # temporary hackney fix until hackney max_connections bug is fixed
  29. # https://git.pleroma.social/pleroma/pleroma/-/issues/2101
  30. email =
  31. Swoosh.Email.put_private(email, :hackney_options, ssl_options: [versions: [:"tlsv1.2"]])
  32. case enabled?() do
  33. true -> Swoosh.Mailer.deliver(email, parse_config(config))
  34. false -> {:error, :deliveries_disabled}
  35. end
  36. end
  37. @spec deliver!(Swoosh.Email.t(), Keyword.t()) :: term | no_return
  38. def deliver!(email, config \\ [])
  39. def deliver!(email, config) do
  40. case deliver(email, config) do
  41. {:ok, result} -> result
  42. {:error, reason} -> raise DeliveryError, reason: reason
  43. end
  44. end
  45. @on_load :validate_dependency
  46. @doc false
  47. def validate_dependency do
  48. parse_config([])
  49. |> Keyword.get(:adapter)
  50. |> Swoosh.Mailer.validate_dependency()
  51. end
  52. defp parse_config(config) do
  53. Swoosh.Mailer.parse_config(@otp_app, __MODULE__, @mailer_config, config)
  54. end
  55. end