Gmail provider with 2-legged OAuth and a service account for the Strapi framework

Usage no npm install needed!

<script type="module">
  import strapiProviderEmailGmail2lo from '';



This package is an email provider for the headless CMS Strapi. You can use this provider to send mail programmatically with strapi-plugin-email.

This provider enables you to send email with the Gmail API using a 2-legged OAuth configuration, when using G Workspace.

Supported versions:

  • v3.5.x (recommended)
  • v3.x

Not having Google Workspace (previously G suite) will not work with this provider.


# using yarn
yarn add strapi-provider-email-gmail-2lo

# using npm
npm install strapi-provider-email-gmail-2lo --save


  1. Enable the Gmail API
  2. Configure the OAuth consent screen
  3. Create a service account
  4. Create a new Private key for your service account
  5. Configure the provider in config/plugins
Variable Type Description Required Default
provider string The name of the provider you use yes
providerOptions object Provider options yes
providerOptions.username string An existing email address within your domain/project yes
providerOptions.clientId number Service account API Client id yes
providerOptions.privateKey string Service account private key yes
settings object Settings no {}
settings.defaultFrom string Default sender mail address, exist in domain no undefined
settings.defaultReplyTo string | array Default address or addresses the receiver is asked to reply to no undefined

Enable the scope in G Workspace (required)

The following steps will authorize the right scope, to allow sending email with G Workspace:

  1. Go to G Workspace admin dashboard > Security > API controls > Manage domain-wide delegation
  2. Add an authorized client
  1. Authorize


Path - config/plugins.js

module.exports = ({ env }) => ({
  // ...
  email: {
    provider: 'gmail-2lo',
    providerOptions: {
      username: '',
      clientId: env('EMAIL_CLIENT_ID'),
      privateKey: env('EMAIL_PRIVATE_KEY').replace(/\\n/g, '\n'),
    settings: {
      defaultFrom: '',
      defaultReplyTo: '',
  // ...

TIP: When using environment variables for your privateKey, as in the example above, include all the \n in you .env file, like so: