pablo-co / bamboo_postmark

A Bamboo adapter for Postmark
MIT License
39 stars 29 forks source link
bamboo bamboo-postmark postmark postmark-adapter

Bamboo.PostmarkAdapter

CircleCI Module Version Hex Docs Total Download License Last Updated

A Postmark adapter for the Bamboo email library.

Installation

The package can be installed by adding :bamboo_postmark to your list of dependencies in mix.exs:

def deps do
  # Get from hex
  [
    {:bamboo_postmark, "~> 1.0"}
  ]

  # Or use the latest from master
  [
    {:bamboo_postmark, github: "pablo-co/bamboo_postmark"}
  ]
end

Add your Postmark API key to your config. You can find this key as Server API token under the Credentials tab in each Postmark server.

# In your configuration file:
#  * General configuration: config/config.exs
#  * Recommended production only: config/prod.exs

config :my_app, MyApp.Mailer,
      adapter: Bamboo.PostmarkAdapter,
      api_key: "my_api_key"
      # Or if you want to use an ENV variable:
      # api_key: {:system, "POSTMARK_API_KEY"}

Follow Bamboo Getting Started Guide.

Using templates

The Postmark adapter provides a helper module for setting the template of an email.

defmodule MyApp.Mail do
  import Bamboo.PostmarkHelper

  def some_email do
    email
    |> template("id_of_template",
                %{name: "John Doe", confirm_link: "http://www.link.com"})
  end
end

Exception Warning

Postmark templates include a subject, HTML body and text body and thus these shouldn't be included in the email as they will raise an API exception.

email
|> template("id", %{value: "Some value"})
|> subject("Will raise exception")
|> html_body("<p>Will raise exception</p>")
|> text_body("Will raise exception")

Tagging emails

The Postmark adapter provides a helper module for tagging emails.

defmodule MyApp.Mail do
  import Bamboo.PostmarkHelper

  def some_email do
    email
    |> tag("some-tag")
  end
end

Sending extra parameters

You can send other extra parameters to Postmark with the put_param helper.

See Postmark's API for a complete list of parameters supported.

email
|> put_param("TrackLinks", "HtmlAndText")
|> put_param("TrackOpens", true)
|> put_param("Attachments", [
  %{
    Name: "file.txt",
    Content: "/some/file.txt" |> File.read!() |> Base.encode64(),
    ContentType: "txt"
  }
])

Changing the underlying request configuration

You can specify the options that are passed to the underlying HTTP client hackney by using the request_options key in the configuration.

Example

config :my_app, MyApp.Mailer,
      adapter: Bamboo.PostmarkAdapter,
      api_key: "my_api_key",
      request_options: [recv_timeout: 10_000]

JSON support

Bamboo comes with JSON support out of the box, see Bamboo JSON support.

Copyright and License

Copyright (c) 2016 Pablo Cárdenas

This library is released under the MIT License. See the LICENSE.md file.