defmodule Prymn.Accounts.UserNotifier do @moduledoc """ Functions for user mail delivery """ import Swoosh.Email alias Prymn.Mailer # Delivers the email using the application mailer. defp deliver(recipient, subject, body) do email = new() |> to(recipient) |> from({"Prymn", "contact@example.com"}) |> subject(subject) |> text_body(body) {:ok, _metadata} = Mailer.deliver(email) {:ok, email} end @doc """ Deliver instructions to confirm account. """ @spec deliver_confirmation_instructions(Prymn.Accounts.User.t(), String.t()) :: {:ok, Swoosh.Email.t()} def deliver_confirmation_instructions(user, url) do deliver(user.email, "Confirmation instructions", """ ============================== Hi #{user.email}, You can confirm your account by visiting the URL below: #{url} If you didn't create an account with us, please ignore this. ============================== """) end @doc """ Deliver instructions to reset a user password. """ @spec deliver_reset_password_instructions(Prymn.Accounts.User.t(), String.t()) :: {:ok, Swoosh.Email.t()} def deliver_reset_password_instructions(user, url) do deliver(user.email, "Reset password instructions", """ ============================== Hi #{user.email}, You can reset your password by visiting the URL below: #{url} If you didn't request this change, please ignore this. ============================== """) end @doc """ Deliver instructions to update a user email. """ @spec deliver_update_email_instructions(Prymn.Accounts.User.t(), String.t()) :: {:ok, Swoosh.Email.t()} def deliver_update_email_instructions(user, url) do deliver(user.email, "Update email instructions", """ ============================== Hi #{user.email}, You can change your email by visiting the URL below: #{url} If you didn't request this change, please ignore this. ============================== """) end end