Packages
swoosh
1.6.3
1.26.3
1.26.2
1.26.1
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.0
1.23.1
1.23.0
1.22.1
1.22.0
1.21.0
1.20.1
1.20.0
1.19.9
1.19.8
1.19.7
1.19.6
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.10
1.17.9
1.17.8
retired
1.17.7
retired
1.17.6
1.17.5
1.17.4
retired
1.17.3
1.17.2
1.17.1
1.17.0
1.16.12
1.16.11
1.16.10
1.16.9
1.16.8
1.16.7
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
retired
1.16.1
retired
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.4
1.14.3
1.14.2
1.14.1
1.14.0
1.13.0
1.12.0
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
retired
1.11.0
1.10.3
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.2
1.5.1
1.5.0
1.4.0
1.3.11
1.3.10
1.3.9
1.3.8
retired
1.3.7
1.3.6
retired
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.9
1.0.8
retired
1.0.7
retired
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.25.6
0.25.5
0.25.4
0.25.3
retired
0.25.2
0.25.1
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.2
0.22.1
0.22.0
0.21.1
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.1
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Compose, deliver and test your emails easily in Elixir. Supports SMTP, Sendgrid, Mandrill, Postmark, Mailgun and many more out of the box. Preview your emails in the browser. Test your email sending code.
Current section
Files
Jump to
Current section
Files
lib/swoosh/adapters/logger.ex
defmodule Swoosh.Adapters.Logger do
@moduledoc ~S"""
An adapter that only logs email using Logger.
It can be useful in environment where you do not necessarily want to send real
emails (eg. staging environments) or in development.
By default it only prints the recipient of the email but you can print the full
email by using `log_full_email: true` in the adapter configuration.
## Example
# config/config.exs
config :sample, Sample.Mailer,
adapter: Swoosh.Adapters.Logger,
level: :debug
# lib/sample/mailer.ex
defmodule Sample.Mailer do
use Swoosh.Mailer, otp_app: :sample
end
"""
use Swoosh.Adapter
require Logger
import Swoosh.Email.Render
@impl true
def deliver(%Swoosh.Email{} = email, config) do
rendered_email = render(config[:log_full_email] || false, email)
Logger.log(config[:level] || :info, rendered_email)
{:ok, %{}}
end
defp render(false, email) do
"New email delivered to #{render_recipient(email.to)}"
end
defp render(true, email) do
recipients = render_recipients(email)
subject = render_subject(email)
headers = render_headers(email)
bodies = render_bodies(email)
message =
[recipients, subject, headers, bodies]
|> Enum.filter(fn text -> text != "" end)
|> Enum.join("\n")
"New email delivered\n#{message}"
end
defp render_subject(email), do: "Subject: #{email.subject}"
defp render_recipients(email) do
[:from, :reply_to, :to, :cc, :bcc]
|> Enum.map(fn key -> {to_string(key), Map.get(email, key)} end)
|> Enum.filter(fn
{_key, value} when is_list(value) -> !Enum.empty?(value)
{_key, value} -> value
end)
|> Enum.map_join("\n", fn {key, value} ->
String.capitalize(key) <> ": " <> render_recipient(value)
end)
end
defp render_headers(email) do
Enum.map_join(
email.headers,
"\n",
fn {key, value} -> "#{key}: #{value}" end
)
end
defp render_bodies(email) do
"""
Text body:
#{email.text_body}
HTML body:
#{email.html_body}
"""
end
end