cannery/lib/cannery/accounts/email.ex

49 lines
1.8 KiB
Elixir
Raw Normal View History

2023-02-25 15:47:37 -05:00
defmodule Cannery.Email do
2022-02-25 21:35:12 -05:00
@moduledoc """
Emails that can be sent using Swoosh.
You can find the base email templates at
2023-02-25 15:47:37 -05:00
`lib/Cannery_web/templates/layout/email.html.heex` for html emails and
`lib/Cannery_web/templates/layout/email.txt.heex` for text emails.
2022-02-25 21:35:12 -05:00
"""
2023-02-25 15:47:37 -05:00
use Phoenix.Swoosh, view: CanneryWeb.EmailView, layout: {CanneryWeb.LayoutView, :email}
import CanneryWeb.Gettext
alias Cannery.Accounts.User
alias CanneryWeb.EmailView
2022-02-25 21:35:12 -05:00
@typedoc """
Represents an HTML and text body email that can be sent
"""
@type t() :: Swoosh.Email.t()
@spec base_email(User.t(), String.t()) :: t()
defp base_email(%User{email: email}, subject) do
2023-02-25 15:47:37 -05:00
from = Application.get_env(:Cannery, Cannery.Mailer)[:email_from] || "noreply@localhost"
name = Application.get_env(:Cannery, Cannery.Mailer)[:email_name]
2022-02-25 21:35:12 -05:00
new() |> to(email) |> from({name, from}) |> subject(subject)
end
@spec generate_email(key :: String.t(), User.t(), attrs :: map()) :: t()
def generate_email("welcome", user, %{"url" => url}) do
user
2023-02-25 15:47:37 -05:00
|> base_email(dgettext("emails", "Confirm your Cannery account"))
2022-02-25 21:35:12 -05:00
|> render_body("confirm_email.html", %{user: user, url: url})
|> text_body(EmailView.render("confirm_email.txt", %{user: user, url: url}))
end
def generate_email("reset_password", user, %{"url" => url}) do
user
2023-02-25 15:47:37 -05:00
|> base_email(dgettext("emails", "Reset your Cannery password"))
2022-02-25 21:35:12 -05:00
|> render_body("reset_password.html", %{user: user, url: url})
|> text_body(EmailView.render("reset_password.txt", %{user: user, url: url}))
end
def generate_email("update_email", user, %{"url" => url}) do
user
2023-02-25 15:47:37 -05:00
|> base_email(dgettext("emails", "Update your Cannery email"))
2022-02-25 21:35:12 -05:00
|> render_body("update_email.html", %{user: user, url: url})
|> text_body(EmailView.render("update_email.txt", %{user: user, url: url}))
end
end