ExGrid

Build Status

Elixir library to interact with Sendgrid's REST API

This is a WIP, YMMV

Usage

Send an email

ExGrid.Mail.send requires a credential Map and a message Map

{ :ok, creds } = ExGrid.credentials(%{api_key: key, api_user: user})
{ :ok, message } = ExGrid.Message.new([to: 'foo@example.com', subject: 'hello world', from: 'me@mysefandi.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

Profile

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"}]>

Bounces

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"}

Blocks

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

{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"}

Statistics

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})

Tests

You must supply your credentials as environment vars to run tests.

API_KEY="secret" API_USER="foo@example.com" mix test test