From 3acc60c17e954b71cdbcb5e2032204637c4b382c Mon Sep 17 00:00:00 2001 From: Iuriy-Budnikov Date: Sat, 15 Jan 2022 22:09:04 +0200 Subject: [PATCH 1/2] add mailer --- config/prod.exs | 11 +++++++++++ lib/form_web/pow_mailer.ex | 33 ++++++++++++++++++++++++++++----- mix.exs | 4 +++- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/config/prod.exs b/config/prod.exs index 1e242e2..0f1d77a 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -53,3 +53,14 @@ config :form, FormWeb.Endpoint, force_ssl: [rewrite_on: [:x_forwarded_proto]] # # Check `Plug.SSL` for all available options in `force_ssl`. + +# Email provider +sendgrid_api_key = + System.get_env("SENDGRID_API_KEY") || + raise """ + environment variable SENDGRID_API_KEY is missing. + """ + +config :form, FormWeb.Pow.Mailer, + adapter: Swoosh.Adapters.Sendgrid, + api_key: sendgrid_api_key diff --git a/lib/form_web/pow_mailer.ex b/lib/form_web/pow_mailer.ex index 905655a..da38f44 100644 --- a/lib/form_web/pow_mailer.ex +++ b/lib/form_web/pow_mailer.ex @@ -1,16 +1,39 @@ defmodule FormWeb.Pow.Mailer do use Pow.Phoenix.Mailer + use Swoosh.Mailer, otp_app: :form + + import Swoosh.Email + require Logger - def cast(%{user: user, subject: subject, text: text, html: html, assigns: _assigns}) do - # Build email struct to be used in `process/1` + @impl true + def cast(%{user: user, subject: subject, text: text, html: html}) do + %Swoosh.Email{} + |> to({"", user.email}) + |> from({"My App", "myapp@example.com"}) + |> subject(subject) + |> html_body(html) + |> text_body(text) - %{to: user.email, subject: subject, text: text, html: html} + # end end + @impl true def process(email) do - # Send email - Logger.debug("E-mail sent: #{inspect(email)}") + + Task.start(fn -> + email + |> deliver() + |> log_warnings() + end) + + :ok + end + + defp log_warnings({:error, reason}) do + Logger.warn("Mailer backend failed with: #{inspect(reason)}") end + + defp log_warnings({:ok, response}), do: {:ok, response} end diff --git a/mix.exs b/mix.exs index 1b7de01..8e49a49 100644 --- a/mix.exs +++ b/mix.exs @@ -43,13 +43,15 @@ defmodule Form.MixProject do {:floki, ">= 0.30.0", only: :test}, {:phoenix_live_dashboard, "~> 0.6"}, {:esbuild, "~> 0.3", runtime: Mix.env() == :dev}, - {:swoosh, "~> 1.3"}, {:telemetry_metrics, "~> 0.6"}, {:telemetry_poller, "~> 1.0"}, {:gettext, "~> 0.18"}, {:jason, "~> 1.2"}, {:plug_cowboy, "~> 2.5"}, + # auth provider {:pow, "~> 1.0.26"}, + # email provider + {:swoosh, "~> 1.5"}, ] end From 40297bd271baaeeaa4a3d94caec0124c355d012c Mon Sep 17 00:00:00 2001 From: Iuriy-Budnikov Date: Sat, 15 Jan 2022 22:20:50 +0200 Subject: [PATCH 2/2] add mailer --- lib/form_web/pow_mailer.ex | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/form_web/pow_mailer.ex b/lib/form_web/pow_mailer.ex index da38f44..28ca94c 100644 --- a/lib/form_web/pow_mailer.ex +++ b/lib/form_web/pow_mailer.ex @@ -22,13 +22,15 @@ defmodule FormWeb.Pow.Mailer do def process(email) do Logger.debug("E-mail sent: #{inspect(email)}") - Task.start(fn -> - email - |> deliver() - |> log_warnings() - end) - - :ok + if Mix.env() == :prod do + Task.start(fn -> + email + |> deliver() + |> log_warnings() + end) + + :ok + end end defp log_warnings({:error, reason}) do