Packages
arke_server
0.3.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-bulk.0
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Arke server
Current section
Files
Jump to
Current section
Files
lib/arke_server/email_manager/mailer.ex
defmodule ArkeServer.Mailer do
defmacro __using__(_)do
quote do
use Swoosh.Mailer, otp_app: :arke_server
import Swoosh.Email
def signin(conn,member,opts), do: {:ok,opts}
def signup(conn,params,opts), do: {:ok,opts}
def reset_password(conn,member,opts), do: {:ok,opts}
def send_email(opts) when is_list(opts) do
case Keyword.keyword?(opts) do
true -> send_email(Enum.into(opts, %{}))
false -> {:error, "email options must be a valid keyword list or map"}
end
end
def send_email(opts) when is_map(opts) do
email = get_email_struct(opts)
deliver(email)
end
def send_email(opts), do: {:error, "email options must be a valid keyword list or map"}
defp get_email_struct(opts) do
sender = get_sender(opts)
receiver = Map.fetch!(opts, :to)
subject = Map.get(opts, :subject, "")
text = Map.get(opts, :text, "")
new()
|> from(sender)
|> to(receiver)
|> subject(subject)
|> text_body(text)
|> parse_option(Map.to_list(opts))
end
defp get_sender(opts) do
case Map.get(opts, :from, nil) do
nil ->
case Application.get_env(:arke_server,__MODULE__)[:default_sender] do
nil -> raise "missing `from:` value and `default_sender` is not set"
default_sender -> default_sender
end
receiver ->
receiver
end
end
defp parse_option(email, [{k, v} | t])
when not is_nil(v) do
parse_option(put_provider_option(email, k, v), t)
end
# See https://hexdocs.pm/swoosh/Swoosh.Attachment.html
defp parse_option(email, [{:attachments, v} | t]) when not is_nil(v) do
attachment = Swoosh.Attachment.new(v)
parse_option(attachment(email, attachment), t)
end
defp parse_option(email, [h | t]), do: parse_option(email, t)
defp parse_option(email, nil), do: email
defp parse_option(email, []), do: email
defoverridable signin: 3,signup: 3, reset_password: 3,send_email: 1
end
end
end