Postmark adapter for the Bamboo e-mail library.
The package can be installed by adding :bamboo_postmark
to your list of
dependencies in mix.exs
:
def deps do
[
{:bamboo, github: "thoughtbot/bamboo"},
{:bamboo_postmark, github: "plausible/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.
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"}
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
template(
email,
"id_of_template",
%{name: "John Doe", confirm_link: "http://www.link.com"}
)
end
end
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")
The Postmark adapter provides a helper module for tagging emails.
defmodule MyApp.Mail do
import Bamboo.PostmarkHelper
def some_email do
tag(email, "some-tag")
end
end
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"
}
])
You can specify the options that are passed to the underlying HTTP client
hackney by using the request_options
key
in the configuration.
config :my_app, MyApp.Mailer,
adapter: Bamboo.PostmarkAdapter,
api_key: "my_api_key",
request_options: [recv_timeout: 10_000]
Bamboo comes with JSON support out of the box, see Bamboo JSON support.
This repository is a fork of pablo-co/bamboo_postmark. We've decided to fork because upstream didn't seem to be under active development. The main reason was that sender/recipient names were not encoded properly, and despite issues and open pull requests, the bug wasn't fixed timely.