Elixir library to interact with Sendgrid's REST API
Hex does not include git repo's from mix, so you will have to add ibrowse to your deps.
In order to install it via hex, add exgrid
and ibrowse
package into the deps list of your mix.exs.
defp deps do
[
{:exgrid, "~> 0.4"}
]
end
Send an email
- note api_user and api_key must contain those keys or you will get a match error
{ :ok, creds } = ExGrid.credentials(%{api_key: "mysecretpassword", api_user: "foo@example.com"})
{ :ok, message } = ExGrid.Message.new([to: "bar@example.com", subject: "hello world", from: "foo@example.com"])
{code, body} = ExGrid.Mail.send(creds, message)
code #=> 200
body #=> #HashDict<[{"message", "success"}]>
body
is a json return
code
is the HTTP response code
Get your profile
{200, body } = ExGrid.Profile.get(creds)
IO.inspect body #=>
[#HashDict<[{"first_name", "John"}, {"username", "foo@fakedomain.com"}, {"website_access", "true"}, {"phone", "123456789"}, {"state", "CO"}, {"last_name", "Doe"}, {"address2", ""}, {"city", "Denver"}, {"email", "foo@fakedomain.com"}, {"website", "http://sendgrid.com"}, {"country", "US"}, {"active", "true"}, {"zip", "80020"}, {"address", "123 main st"}]>]
Set a profile attribute
{200, body} = ExGrid.Profile.set(creds, %{address: "456 Main st"})
IO.inspect body #=> #HashDict<[{"message", "success"}]>
Please see docs for all parameters
{200, body} = ExGrid.Bounces.get(creds)
# return the `created` time for each bounce
{200, body} = ExGrid.Bounces.get(creds, %{date: 1})
remove bounces
{200, body} = ExGrid.Bounces.remove(creds, %{type: "soft"})
IO.inspect body #=> {"message", "success"}
{200, body} = ExGrid.Bounces.remove(creds, %{email: "foobarbazwoot@nowhereland.biz"})
IO.inspect body #=> {"message", "success"}
You can even get bounce counts
{200, body} = ExGrid.Bounces.count(creds)
IO.inspect body #=> {"count", "4"}
Please see docs for all parameters
{200, body} = ExGrid.Blocks.get(creds)
# return the `created` time for each block
{200, body} = ExGrid.Blocks.get(creds, %{date: 1})
remove blocks
- only parameter accepted is
email
{200, body} = ExGrid.Blocks.remove(creds, %{email: "foobarbazwoot@nowhereland.biz"})
IO.inspect body #=> {"message", "success"}
You can even get block counts
{200, body} = ExGrid.Blocks.count(creds)
IO.inspect body #=> {"count", "4"}
Please see docs for all parameters
{200, body} = ExGrid.Statistics.get(creds)
IO.inspect body #=>
HashDict<[
[
{
"date": "2014-02-26",
"delivered": 314,
"unsubscribes": 1,
"invalid_email": 5,
"bounces": 9,
"repeat_unsubscribes": 2,
"unique_clicks": 65,
"blocked": 3,
"spam_drop": 5,
"repeat_bounces": 8,
"repeat_spamreports": 9,
"requests": 350,
"spamreports": 1,
"clicks": 78,
"opens": 80,
"unique_opens": 70
]>
Number of days in the past to include statistics (Includes today)
{200, body} = ExGrid.Statistics.get(creds, %{days: 1})
List all categories
{200, body} = ExGrid.Statistics.categories(creds)
You can even get aggregate stats
{200, body} = ExGrid.Statistics.get(creds, %{aggregate: 1})
You must supply your credentials as environment vars to run tests.
- This is a WIP
API_KEY="secret" API_USER="foo@example.com" mix test