Courier

Mail delivery for Elixir

Build Status

Courier is an adapter-based mail delivery system for Elixir applications. It depends upon [Mail](https://github.com/DockYard/elixir-mail) for composing the message.

First create your mailer:

defmdodule MyApp.Mailer do
  use Courier, otp_app: :my_app
end

Next set the default adapter in config/config.exs or config/{environment}.exs:

config :my_app, MyApp.Mailer,
  adapter: Courier.Adapters.SMTP,
  relay: "smtp.myserver.com",
  hostname: "my-mail-server",
  port: 2525,
  username: System.get_env("COURIER_USERNMAE"),
  password: System.get_env("CORUIER_PASSWORD")

More configuration options for each adapter is in the Adapters section.

Then you can compose and deliver the message:

message =
  Mail.build_multipart()
  |> Mail.put_to("friend@example.com")
  |> Mail.put_from("me@example.com")
  |> Mail.put_subject("How are things?")
  |> Mail.put_text("Let's meet for drinks!")
  |> Mail.put_html("<p>Let&#39;s meet for drinks!</p>")
  |> MyApp.Mailer.deliver()

Courier will deliver the message through the adapter that is configured.

Rendering with Phoenix Views

If you'd like to render the text or html parts with a Phoenix view you should use Courier.render/4

message =
  Mail.build_multipart()
  |> Mail.put_to("friend@example.com")
  |> Mail.put_from("me@example.com")
  |> Mail.put_subject("How are things?")
  |> Courier.render(MyApp.MailerView, "check_in.txt", user: user)
  |> Courier.render(MyApp.MailerView, "check_in.html", user: user)
  |> MyApp.Mailer.deliver()

Courier.render/4 will parse the template path to determine the expected content-type. For example, if your template is foobar.html the assumed content-type is text/html and Courier will render the template to a string and use Mail.put_html(message, rendered_template)

Adapters

Courier comes with some built-in adapters

Courier.Adapters.SMTP

The built-in SMTP adapter is implemented with gen_smtp

Options:

Courier.Adapters.Logger

Will write deliver all messages to the Logger. All attachment encoded data will rener as [File content]

Options:

Courier.Adapters.Test

Exposes the ETS adapter from a REST based API

Courier.Adapters.Web

CourierWeb adds a web interface for viewing the messages sent. To use it add the library to your mix.exs file. For more information on this adapter please refer to CourierWeb

Authors

We are very thankful for the many contributors

Versioning

This library follows Semantic Versioning

Looking for help with your Elixir project?

At DockYard we are ready to help you build your next Elixir project. We have a unique expertise in Elixir and Phoenix development that is unmatched. Get in touch!

At DockYard we love Elixir! You can read our Elixir blog posts or come visit us at The Boston Elixir Meetup that we organize.

Want to help?

Please do! We are always looking to improve this library. Please see our Contribution Guidelines on how to properly submit issues and pull requests.

Legal

DockYard, Inc. &copy; 2016

@dockyard

Licensed under the MIT license