defmodule MvWeb.Emails.JoinAlreadyPendingEmail do @moduledoc """ Sends an email when someone submits the join form with an address that already has a submitted (confirmed) application under review. 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 "application already under review" 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 under review") 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_pending.html", assigns) Mailer.deliver(email, Mailer.smtp_config()) end end