I have my own SMTP server. It’s behind SSL/TLS - port 465
In my phoenix I use Swoosh to send emails. Since recently I’ve been facing this error:
delivery error:
{:retries_exceeded, {:network_failure, ~c"mail.my_mail_server.com", {:error, {:options, :incompatible, [verify: :verify_peer, cacerts: :undefined]}}}}
My config:
adapter: Swoosh.Adapters.SMTP,
relay: host,
username: user,
password: password,
port: port,
ssl: true,
tls: :always,
# allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2", :"tlsv1.3"],
auth: :always,
retries: 5,
no_mx_lookups: true,
ssl: [
# ssl_opts: [
# ssl_options: [
verify: :verify_none,
# verify: :verify_peer,
# cacerts: :public_key.cacerts_get(),
# versions: [:"tlsv1.2"],
# versions: [:"tlsv1.3"],
# customize_hostname_check: [
# match_fun: :public_key.pkix_verify_hostname_match_fun(:https)
# ]
],
tls_options: [
# verify: :verify_peer,
verify: :verify_none,
# cacerts: :certifi.cacerts(),
# cacerts: :public_key.cacerts_get(),
# server_name_indication: ~c"#{host}",
]
An interesting thing is that all the options that have to do with tls
and ssl
will be ignored.
Meaning, the error will always contain
<...> { verify: :verify_peer, cacerts: :undefined}...
There’s never been an error with verify: :verify_none
and cacerts: <something_else>
, even though I’ve set it up.
Why? I’ve set different values in the config. Why will they remain verify: :verify_peer, cacerts: :undefined
?
And it’s unclear wether I should used ssl_opts
, ssl
or ssl_options
– I’ve tried dozens of combinations. The same goes for the tls_options
.
What’s the matter?
The emails I’ll send from an email-client from my local computer via the same email server get sent with no issue, and under the same settings: port 465, SSL/TLS, same relay.
P.S.
OTP 26
.
I’m aware of this - Erlang/OTP 26 Highlights - Erlang/OTP
But, as I’ve mentioned, it’ll ignore my verify: <...>
variables in the first place.