Skip to content
forked from bradleyd/exgrid

Elixir library to interact with Sendgrid's API

Notifications You must be signed in to change notification settings

kathgironpe/exgrid

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ExGrid

Build Status Hex.pm

Elixir library to interact with Sendgrid's REST API

This is a WIP, YMMV

Installation

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
    [
      {:ibrowse, github: "cmullaparthi/ibrowse", tag: "v4.1.0"},
      {:exgrid, "~> 0.2.3"}
    ]
  end

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

About

Elixir library to interact with Sendgrid's API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Elixir 100.0%