fix(backend): handle email not being sent when resending registration instructions

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel 2023-08-17 10:35:03 +02:00
parent 52b3e5b151
commit b2492a3870
No known key found for this signature in database
GPG key ID: A061B9DDE0CA0773
3 changed files with 22 additions and 5 deletions

View file

@ -302,6 +302,9 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
{:error, :invalid_email} -> {:error, :invalid_email} ->
{:error, dgettext("errors", "This email doesn't seem to be valid")} {:error, dgettext("errors", "This email doesn't seem to be valid")}
{:error, :failed_sending_mail} ->
{:error, dgettext("errors", "Couldn't send an email. Internal error.")}
{:error, :email_too_soon} -> {:error, :email_too_soon} ->
{:error, {:error,
dgettext( dgettext(

View file

@ -4,10 +4,18 @@ defmodule Mobilizon.Web.Email.Mailer do
""" """
use Swoosh.Mailer, otp_app: :mobilizon use Swoosh.Mailer, otp_app: :mobilizon
alias Mobilizon.Service.ErrorReporting.Sentry alias Mobilizon.Service.ErrorReporting.Sentry
require Logger
@spec send_email(Swoosh.Email.t()) :: {:ok, term} | {:error, term} @spec send_email(Swoosh.Email.t()) :: {:ok, term} | {:error, term}
def send_email(email) do def send_email(email) do
Mobilizon.Web.Email.Mailer.deliver(email) Logger.debug(
"Mailer options #{inspect(Keyword.drop(Application.get_env(:mobilizon, Mobilizon.Web.Email.Mailer), [:tls_options]))}"
)
Logger.debug("Sending mail, #{inspect(email)}")
res = Mobilizon.Web.Email.Mailer.deliver(email)
Logger.debug("Return from sending mail #{inspect(res)}")
res
rescue rescue
error -> error ->
Sentry.capture_exception(error, Sentry.capture_exception(error,

View file

@ -91,13 +91,19 @@ defmodule Mobilizon.Web.Email.User do
Users.update_user(user, %{ Users.update_user(user, %{
"confirmation_sent_at" => DateTime.utc_now() |> DateTime.truncate(:second) "confirmation_sent_at" => DateTime.utc_now() |> DateTime.truncate(:second)
}) do }) do
send_confirmation_email(user, locale) case send_confirmation_email(user, locale) do
Logger.info("Sent confirmation email again to #{user.email}") {:ok, _} ->
{:ok, user.email} Logger.info("Sent confirmation email again to #{user.email}")
{:ok, user.email}
{:error, err} ->
Logger.error("Failed sending email to #{user.email}. #{inspect(err)}")
{:error, :failed_sending_mail}
end
end end
end end
@spec send_confirmation_email(User.t(), String.t()) :: Swoosh.Email.t() @spec send_confirmation_email(User.t(), String.t()) :: {:ok, term} | {:error, term}
def send_confirmation_email(%User{} = user, locale \\ "en") do def send_confirmation_email(%User{} = user, locale \\ "en") do
user user
|> Email.User.confirmation_email(locale) |> Email.User.confirmation_email(locale)