refactor: unify smtp config logic
This commit is contained in:
parent
e95c1d6254
commit
e8f27690a1
6 changed files with 162 additions and 54 deletions
|
|
@ -31,6 +31,7 @@ defmodule Mv.Mailer do
|
|||
import Swoosh.Email
|
||||
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
||||
|
||||
alias Mv.Smtp.ConfigBuilder
|
||||
require Logger
|
||||
|
||||
# Simple format check for test-email recipient only (e.g. allows a@b.c). Not for strict RFC validation.
|
||||
|
|
@ -100,40 +101,19 @@ defmodule Mv.Mailer do
|
|||
@spec smtp_config() :: keyword()
|
||||
def smtp_config do
|
||||
if Mv.Config.smtp_configured?() and not boot_smtp_configured?() do
|
||||
host = Mv.Config.smtp_host()
|
||||
port = Mv.Config.smtp_port() || 587
|
||||
username = Mv.Config.smtp_username()
|
||||
password = Mv.Config.smtp_password()
|
||||
ssl_mode = Mv.Config.smtp_ssl() || "tls"
|
||||
|
||||
verify_mode =
|
||||
if Application.get_env(:mv, :smtp_verify_peer, false),
|
||||
do: :verify_peer,
|
||||
else: :verify_none
|
||||
|
||||
base_opts = [
|
||||
adapter: Swoosh.Adapters.SMTP,
|
||||
relay: host,
|
||||
port: port,
|
||||
ssl: ssl_mode == "ssl",
|
||||
tls: if(ssl_mode == "tls", do: :always, else: :never),
|
||||
auth: :always,
|
||||
username: username,
|
||||
password: password,
|
||||
# tls_options: used for STARTTLS (587). For 465, gen_smtp uses sockopts for initial ssl:connect.
|
||||
tls_options: [verify: verify_mode]
|
||||
]
|
||||
|
||||
# Port 465: initial connection is ssl:connect; pass verify in sockopts so server cert is not required.
|
||||
# Port 587: initial connection is gen_tcp; sockopts must NOT contain verify (gen_tcp rejects it).
|
||||
opts =
|
||||
if ssl_mode == "ssl" do
|
||||
Keyword.put(base_opts, :sockopts, verify: verify_mode)
|
||||
else
|
||||
base_opts
|
||||
end
|
||||
|
||||
opts |> Enum.reject(fn {_k, v} -> is_nil(v) end)
|
||||
ConfigBuilder.build_opts(
|
||||
host: Mv.Config.smtp_host(),
|
||||
port: Mv.Config.smtp_port() || 587,
|
||||
username: Mv.Config.smtp_username(),
|
||||
password: Mv.Config.smtp_password(),
|
||||
ssl_mode: Mv.Config.smtp_ssl() || "tls",
|
||||
verify_mode: verify_mode
|
||||
)
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue