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
[
{:ibrowse, github: "cmullaparthi/ibrowse", tag: "v4.1.0"},
{:exgrid, "~> 0.2.3"}
]
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: key, api_user: user})
{ :ok, message } = ExGrid.Message.new([to: '[email protected]', subject: 'hello world', from: '[email protected]'])
{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", "[email protected]"}, {"website_access", "true"}, {"phone", "123456789"}, {"state", "CO"}, {"last_name", "Doe"}, {"address2", ""}, {"city", "Denver"}, {"email", "[email protected]"}, {"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: "[email protected]"})
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: "[email protected]"})
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.
API_KEY="secret" API_USER="[email protected]" mix test test