42 lines
1.2 KiB
Elixir
42 lines
1.2 KiB
Elixir
defmodule MvWeb.Emails.JoinAlreadyMemberEmail do
|
||
@moduledoc """
|
||
Sends an email when someone submits the join form with an address that is already a member.
|
||
|
||
Used for anti-enumeration: the UI shows the same success message; only the email
|
||
informs the recipient. Uses 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 "already a member" notice to the given address.
|
||
|
||
Returns `{:ok, email}` on success, `{:error, reason}` on delivery failure.
|
||
"""
|
||
def send(email_address) when is_binary(email_address) do
|
||
subject = gettext("Membership application – already a member")
|
||
|
||
assigns = %{
|
||
subject: subject,
|
||
app_name: Mailer.mail_from() |> elem(0),
|
||
locale: Gettext.get_locale(MvWeb.Gettext)
|
||
}
|
||
|
||
email =
|
||
new()
|
||
|> from(Mailer.mail_from())
|
||
|> to(email_address)
|
||
|> subject(subject)
|
||
|> put_view(MvWeb.EmailsView)
|
||
|> render_body("join_already_member.html", assigns)
|
||
|
||
Mailer.deliver(email, Mailer.smtp_config())
|
||
end
|
||
end
|