Seyi
April 2, 2024, 1:49pm
1
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.
Thanks
1 Like
Hi @Seyi it’s pretty hard to help if you don’t show your code.
Seyi
April 2, 2024, 11:09pm
3
Here are the relevant part of the code You might need to see
Config
config :goolify, Goolify.Mailer,
adapter: Swoosh.Adapters.SMTP,
relay: "smtp.gmail.com",
username: "me@mail.com",
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 =
new()
|> to(recipient)
|> from({"Goolify", "admin@mail.com"})
|> subject(subject)
|> text_body(body)
case Mailer.deliver(email) do
{:ok, _metadata} ->
{:ok, email}
{:error, reason} ->
{:error, reason}
end
end
dacz
April 5, 2024, 6:14pm
4
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.
This might help someone: the method above didn’t work for me, maybe because my OTP version is 27. I ended up solving the issue easily using Swoosh’s Mua.
opened 09:42AM - 30 Jun 23 UTC
bug
### Describe the bug
Hi there, I'm not sure if i should open this issue in `g… en_smtp` or here, but given that I'm using `gen_smtp` via Swoosh and Elixir its safer to start here.
I recently updated my Projects to Elixir 1.15 and OTP/26, and everything but sending emails via swoosh works fine.
I am sending E-Mails via SMTP, using a local business mail provider as a relay.
Swoosh tries sending the email multiple times and finally fails with the following error:
```
{:error,
{:retries_exceeded, {:temporary_failure, ~c"XXX.XXX.XXX.XXX", :tls_failed}}}
```
Here is my configuration:
```
config :redacted, REDACTED.Mailer,
adapter: Swoosh.Adapters.SMTP,
relay: System.get_env("SMTP_HOST") || raise("missing SMTP_HOST"),
username: System.get_env("SMTP_USERNAME") || raise("missing SMTP_USERNAME"),
password: System.get_env("SMTP_PASSWORD") || raise("missing SMTP_PASSWORD"),
tls: :always,
ssl: false,
auth: :always,
port: 587,
retries: 15
```
The provider only supports STARTTLS via port 587, so that's why `ssl` is set to `false`.
With Elixir 1.15 on OTP/25 it worked fine, with OTP/26 the issue appears.
I checked the Erlang documentation, but there don't seem to be any breaking changes related to TLS apart from SSL certificate validation being on by default, but that should be fine? I know this is not much to go on, but unfortunately swoosh does not give me any more information apart from `:tls_failed` which makes this hard to debug.
### Steps to Reproduce the Bug or Issue
Send an email via Swoosh's SMTP adapter and the aforementioned config with OTP/26.
### Expected behavior
The email sends without issues.
### Your reproducible example
_No response_
### Screenshots or Videos
_No response_
### Platform
- OTP: 26.0.2
- Elixir: 1.15.0
### Additional context
_No response_