Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - KamilLelonek/ex_postmark: Postmark adapter for sending template emails in Elixir
Postmark adapter for sending template emails in Elixir - KamilLelonek/ex_postmark
Visit SiteGitHub - KamilLelonek/ex_postmark: Postmark adapter for sending template emails in Elixir
Postmark adapter for sending template emails in Elixir - KamilLelonek/ex_postmark
Powered by 0x5a.live ๐
ex_postmark
This is a library inspired by swoosh
for Postmark service to send template emails.
Installation
If available in Hex, the package can be installed as:
- Add
ex_postmark
to your list of dependencies inmix.exs
:
def deps do
[{:ex_postmark, "~> 1.x.x"}]
end
- Ensure
ex_postmark
is started before your application:
def application do
[applications: [:ex_postmark]]
end
Usage
You will need to prepare a couple of files to make ex_postmark
working.
Config
Here is the way how to prepare specific config files:
Development
# 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.
Tests
# config/test.ex
config :your_application, YourApplication.Mailer,
adapter: ExPostmark.Adapters.Test
You can access the recent sent email as:
assert_received {:email, email}
Production
# 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.
Mailer
Next, you have to prepare a corresponding mailer:
# your_application/mailer.ex
defmodule YourApplication.Mailer do
use ExPostmark.Mailer, otp_app: :your_application
end
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
Email.new(
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:
YourApplication.Mailer.deliver(emai)
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:
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.
Tests
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 credentialsPOSTMARK_EMAIL_FROM
- your verified sender signature in PostmarkPOSTMARK_EMAIL_TO
- any existing recipient emailPOSTMARK_TEMPLATE_ID
- an ID of configured template in Postmark
Contributing
- Fork the repository and then clone it locally:
git clone https://github.com/KamilLelonek/ex_postmark
- Create a topic branch for your changes:
git checkout -b fix-mailchimp-pricing-bug
- Commit a failing test for the bug:
git commit -am "Adds a failing test that demonstrates the bug"
- Commit a fix that makes the test pass:
git commit -am "Adds a fix for the bug"
- Run the tests:
mix test
- If everything looks good, push to your fork:
git push origin fix-mailchimp-pricing-bug
Documentation
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.
Elixir Resources
are all listed below.
Made with โค๏ธ
to provide different kinds of informations and resources.