elixir-gmail icon indicating copy to clipboard operation
elixir-gmail copied to clipboard

A Gmail API client for Elixir

elixir-gmail

Build Status Coverage Status hex.pm version hex.pm downloads Inline docs

A simple Gmail REST API client for Elixir.

You can find the hex package here, and the docs here.

You can find documentation for Gmail's API at https://developers.google.com/gmail/api/

Usage

First, add the client to your mix.exs dependencies:

def deps do
  [{:gmail, "~> 0.1"}]
end

Then run $ mix do deps.get, compile to download and compile your dependencies.

Finally, add the :gmail application as your list of applications in mix.exs:

def application do
  [applications: [:logger, :gmail]]
end

Before you can work with mail for a user you'll need to start a process for them.

{:ok, pid} = Gmail.User.start_mail("[email protected]", "user-refresh-token")

When a user process starts it will automatically fetch a new access token for that user. Then you can start playing with mail:

# fetch a list of threads
{:ok, threads, next_page_token} = Gmail.User.threads("[email protected]")

# fetch the next page of threads using a page token
{:ok, _, _} = Gmail.User.threads("[email protected]", %{page_token: next_page_token})

# fetch a thread by ID
{:ok, thread} = Gmail.User.thread("[email protected]", "1233454566")

# fetch a list of labels
{:ok, labels} = Gmail.User.labels("[email protected]")

Check the docs for a more complete list of functionality.

API Support

  • [ ] Threads
    • [x] get
    • [x] list
    • [ ] modify
    • [x] delete
    • [x] trash
    • [x] untrash
  • [ ] Messages
    • [x] delete
    • [x] get
    • [ ] insert
    • [x] list
    • [x] modify
    • [ ] send
    • [x] trash
    • [x] untrash
    • [ ] import
    • [ ] batchDelete
  • [x] Labels
    • [x] create
    • [x] delete
    • [x] list
    • [x] update
    • [x] get
    • [x] update
    • [x] patch
  • [ ] Drafts
    • [x] list
    • [x] get
    • [x] delete
    • [ ] update
    • [ ] create
    • [x] send
    • [ ] send (with upload)
  • [x] History
    • [x] list
  • [x] Attachments
    • [x] get (thanks to @killtheliterate)

Auth

As of now the library doesn't do the initial auth generation for you; you'll need to create an app on the Google Developer Console to get a client ID and secret and authorize a user to get an authorization code, which you can trade for an access token.

The library will however, when you supply a refresh token, use that to refresh an expired access token for you. Take a look in the dev.exs.sample config file to see what your config should look like.

TODO

  • [x] Stop mocking HTTP requests and use Bypass instead
  • [x] Add format option when fetching threads
  • [x] .. and messages
  • [ ] .. and drafts
  • [ ] Batched requests
  • [ ] Document the config (specifically pool size)