43 lines
1.4 KiB
Elixir
43 lines
1.4 KiB
Elixir
defmodule MvWeb.Emails.JoinConfirmationEmail do
|
|
@moduledoc """
|
|
Sends the join request confirmation email (double opt-in) using the unified email layout.
|
|
"""
|
|
use Phoenix.Swoosh,
|
|
view: MvWeb.EmailsView,
|
|
layout: {MvWeb.EmailLayoutView, "layout.html"}
|
|
|
|
use MvWeb, :verified_routes
|
|
import Swoosh.Email
|
|
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
|
|
|
alias Mv.Mailer
|
|
|
|
@doc """
|
|
Sends the join confirmation email to the given address with the confirmation link.
|
|
|
|
Called from the domain after a JoinRequest is created (submit flow).
|
|
Returns `{:ok, email}` on success, `{:error, reason}` on delivery failure.
|
|
Callers should log errors and may still return success for the overall operation
|
|
(e.g. join request created) so the user is not shown a generic error when only
|
|
the email failed.
|
|
"""
|
|
def send(email_address, token) when is_binary(email_address) and is_binary(token) do
|
|
confirm_url = url(~p"/confirm_join/#{token}")
|
|
subject = gettext("Confirm your membership request")
|
|
|
|
assigns = %{
|
|
confirm_url: confirm_url,
|
|
subject: subject,
|
|
app_name: Mailer.mail_from() |> elem(0),
|
|
locale: Gettext.get_locale(MvWeb.Gettext)
|
|
}
|
|
|
|
new()
|
|
|> from(Mailer.mail_from())
|
|
|> to(email_address)
|
|
|> subject(subject)
|
|
|> put_view(MvWeb.EmailsView)
|
|
|> render_body("join_confirmation.html", assigns)
|
|
|> Mailer.deliver()
|
|
end
|
|
end
|