Help setup email verification in Phoenix

I noticed the default email verifaction set by gen.auth is to save email localy, So I tried using SMTP but I have been facing some issues, I was able to fix it up to some point, but am not sure I know what’s really wrong again

here is there error log

[error] GenServer #PID<0.1077.0> terminating
** (BadMapError) expected a map, got: []
    (gen_smtp 1.2.0) :mimemail.ensure_content_headers/7
    (gen_smtp 1.2.0) c:/Users/seyi/Desktop/goolify/deps/gen_smtp/src/mimemail.erl:204: :mimemail.encode/2
    (swoosh 1.16.3) lib/swoosh/adapters/smtp.ex:55: Swoosh.Adapters.SMTP.deliver/2
    (goolify 0.1.0) lib/goolify/mailer.ex:2: anonymous fn/2 in Goolify.Mailer.instrument/3
    (telemetry 1.2.1) c:/Users/seyi/Desktop/goolify/deps/telemetry/src/telemetry.erl:321: :telemetry.span/3
    (goolify 0.1.0) lib/goolify/account/user_notifier.ex:15: Goolify.Account.UserNotifier.deliver/3
    (goolify 0.1.0) lib/goolify_web/live/user_registration_live.ex:108: GoolifyWeb.UserRegistrationLive.handle_event/3
    (phoenix_live_view 0.20.9) lib/phoenix_live_view/channel.ex:507: anonymous fn/3 in Phoenix.LiveView.Channel.view_handle_event/3
    (telemetry 1.2.1) c:/Users/seyi/Desktop/goolify/deps/telemetry/src/telemetry.erl:321: :telemetry.span/3
    (phoenix_live_view 0.20.9) lib/phoenix_live_view/channel.ex:260: Phoenix.LiveView.Channel.handle_info/2
    (stdlib 5.1.1) gen_server.erl:1077: :gen_server.try_handle_info/3
    (stdlib 5.1.1) gen_server.erl:1165: :gen_server.handle_msg/6
    (stdlib 5.1.1) proc_lib.erl:241: :proc_lib.init_p_do_apply/3

Am using Google smtp, The Config seems very fine to me and the Swoosh.Adapters.SMTP.deliver/2 is also okay, obviously I am missing something, I am new to phoenix , I will really appreciate your help.

Hi @Seyi it’s pretty hard to help if you don’t show your code.

Here are the relevant part of the code You might need to see


config :goolify, Goolify.Mailer,
  adapter: Swoosh.Adapters.SMTP,
  relay: "",
  username: "",
  password: "my-mail-password",
  ssl: true,
  tls: :always,
  auth: :always,
  port: 465,
  retries: 2,
  no_mx_lookups: false

userNotifier file

  defp deliver(recipient, subject, body) do
    email =
      |> to(recipient)
      |> from({"Goolify", ""})
      |> subject(subject)
      |> text_body(body)

     case Mailer.deliver(email) do
      {:ok, _metadata} ->
        {:ok, email}

      {:error, reason} ->
        {:error, reason}

Hi @Seyi , I fought with SMTP settings yesterday and this changes in config worked for me:

ssl: false,
tls: :always,
tls_options: [verify: :verify_none],
auth: :always,
port: 587,

I have no idea, why the port is this one (my SMTP provider gave me standard 465) but I tried all combinations and read many questions/answers online.

I believe that TLS will somehow negotiate secure connection. TLS options for verify just tells that you do not want it to verify email server certificate. I think (not sure) that if you would like to do it, you will need to set up some proper certs…

Hope it will work for you, too.