ExGrid
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
- note api_user and api_key must contain those keys or you will get a match error
{ :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
- 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"}
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