# BambooGmail

Gmail adapter for [Bamboo](

*Why not just use SMTP?*

Starting in 2020, [Google is deprecating the use of its Gmail API with SMTP usage](
This adapter allows GSuite account holders to use Bamboo in light of this deprecation by using OAuth2 for authentication.


## Preconditions

There are a few preconditions that must be met before this adapter can be used to send email:
1. Admin access to a GSuite account
2. Implement [server-side authorization](
3. Grant the service account domain-wide authority
4. Authorize API client with required scopes


## Installation

The package can be installed by adding `bamboo_gmail` to your list of dependencies in `mix.exs`:

def deps do
    {:bamboo_gmail, "~> 0.1.0"}

Some application settings must be configured. See the [example section](#example-config) below.


## Configuration

#### Required GmailAdapter settings:

  - Bamboo adapter

  - Email address the service account is impersonating (address the email is sent from).
  - If impersonation is not needed, then `nil` (it is likely needed).

#### Required Dependency settings:

  - Google auth crendentials must be povided in JSON format.
  - These are generated in the [Google Developers Console](

#### Optional settings:

  - Development mode that does not send email. 
  - details of the API call are instead output to the elixir console.


#### Note: 

*Secrets such as the service account sub, and the auth credentials should not
be commited to version control.*

- Instead, pass in via environment variables using a tuple: `{:system, "SUB_ADDRESS"}`,
- or read in from a file: `"creds.json" |>!`


#### Example Config

config :app_name, GmailAdapterTestWeb.Mailer,
  adapter: Bamboo.GmailAdapter,
  sub: {:system, "SUB_ADDRESS"},
  sandbox: false

  # Google auth credentials must be provided to the `goth` app
  config :goth, json: {:system, "GCP_CREDENTIALS"}

## Google Authorization/Authentication Help

The Google-related preconditions described above may be a little tricky.
If you find yourself stuck, please refer to the [wiki]() for help.

Documentation can be generated with [ExDoc](
and published on [HexDocs]( Once published, the docs can
be found at [](


## Contribute

Contribution Guidelines can be found [here](
Please feel free to use, share, and extend this project. PR's welcome.