Monthly Downloads: 372
Programming language: Elixir
License: MIT License
Tags: Email    

ex_postmark alternatives and similar packages

Based on the "Email" category.
Alternatively, view ex_postmark alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of ex_postmark or a related project?

Add another 'Email' Package



Build Status

This is a library inspired by swoosh for Postmark service to send template emails.


If available in Hex, the package can be installed as:

  1. Add ex_postmark to your list of dependencies in mix.exs:
def deps do
  [{:ex_postmark, "~> 1.x.x"}]
  1. Ensure ex_postmark is started before your application:
def application do
  [applications: [:ex_postmark]]


You will need to prepare a couple of files to make ex_postmark working.


Here is the way how to prepare specific config files:


# config/dev.ex

config :your_application, YourApplication.Mailer,
  adapter: ExPostmark.Adapters.Local

You can access all sent emails using convenient ExPostmark.Adapters.Local.Storage functions.


# config/test.ex

config :your_application, YourApplication.Mailer,
  adapter: ExPostmark.Adapters.Test

You can access the recent sent email as:

assert_received {:email, email}


# config/prod.ex

config :your_application, YourApplication.Mailer,
  adapter:        ExPostmark.Adapters.Postmark,
  server_api_key: System.get_env("POSTMARK_SERVER_API_KEY")

Emails are being sent using regular Postmark platform.


Next, you have to prepare a corresponding mailer:

# your_application/mailer.ex

defmodule YourApplication.Mailer do
    use ExPostmark.Mailer, otp_app: :your_application

Note that otp_app represents the configured name.

Creating an email

Firstly, you have to prepare an email. You can do that in two ways:

1. Using new/1 constructor

  from:           {"From", "[email protected]"},
  to:             "[email protected]",
  cc:             ["[email protected]", {"CC2", "[email protected]"}],
  bcc:            "[email protected]",
  reply_to:       "[email protected]",
  headers:        %{"X-Accept-Language" => "pl"},
  template_id:    1,
  template_model: %{name: "name", team: "team"}

2. Using builder functions

email = Email.new()
      |> Email.to("[email protected]")
      |> Email.cc("[email protected]")
      |> Email.bcc("[email protected]")
      |> Email.template_id(123)
      |> Email.put_template_model(:name, "Name")
      |> Email.put_template_model(:team, "Team")

All functions are available in docs.

Sending an email

Once you have an Email prepared, you can use your predefined Mailer to send it:


And that's it, your email should be sent.

A note about subjects:

There is a way to set a subject for your email using a template, but it's not done out of the box. You need to make sure to add an additional variable subject for your template model and then put it in a place of a Subject line.

Here is the final configuration:

Postmark subject

Later on, you can use subject in a convenient method like:

email = Email.new()
      |> Email.subject("[email protected]")
      # ...

but don't be confused, as it's not a regular way to put a custom subject.


To run all tests, execute:

mix test

Keep in mind that the default command will skip integration tests. To include them, run:

mix test --include integration

For integration test make sure you have the following vairables exported in your environment:

  • POSTMARK_SERVER_API_KEY - Server API token required for authentication from Postmark server credentials
  • POSTMARK_EMAIL_FROM - your verified sender signature in Postmark
  • POSTMARK_EMAIL_TO - any existing recipient email
  • POSTMARK_TEMPLATE_ID - an ID of configured template in Postmark


  1. Fork the repository and then clone it locally:
  git clone https://github.com/KamilLelonek/ex_postmark
  1. Create a topic branch for your changes:
  git checkout -b fix-mailchimp-pricing-bug
  1. Commit a failing test for the bug:
  git commit -am "Adds a failing test that demonstrates the bug"
  1. Commit a fix that makes the test pass:
  git commit -am "Adds a fix for the bug"
  1. Run the tests:
  mix test
  1. If everything looks good, push to your fork:
  git push origin fix-mailchimp-pricing-bug
  1. Submit a pull request.


Documentation is written into the library, you will find it in the source code, accessible from iex and of course, it all gets published to hexdocs.