strapi-provider-email-gmail-api
Yet another Strapi email provider for Gmail using OAuth 2.0 ;)
Installation
It's required to install this package with a different alias so that it belongs to the @strapi scope.
# npm
npm i @strapi/provider-email-gmail-api@npm:@bztes/strapi-provider-email-gmail-api
# or yarn
yarn add @strapi/provider-email-gmail-api@npm:@bztes/strapi-provider-email-gmail-api
The package.json
should then contain:
"dependencies": {
"@strapi/provider-email-gmail-api": "npm:@bztes/strapi-provider-email-gmail-api@^4.0.0",
}
Preparing Google API
Enable the Gmail API with OAuth authentication in 5 steps
Create a new Project
- Open the Google Console
- Create a new Project
Enable Gmail API
- In the Google Console select 'APIs & Services' -> 'Library'
- Search for 'Gmail' and click on enable
Configure OAuth consent screen
- In the Google Console select 'APIs & Services' -> 'OAuth consent screen'
- Select User Type 'Internal'
- Provide an App name and email address and click on 'save and continue'
- Click on 'add or remove scope'
- Select 'Gmail API .../auth/gmail.send' and click on 'update' and then 'save and continue'
Add Credentials
- In the Google Console select 'APIs & Services' -> 'Credentials'
- Select 'create credentials' -> 'OAuth client ID'
- Select 'Web application' and provide a name
- For 'Authorized redirect URIs' add 'https://developers.google.com/oauthplayground'
- Click on 'create'
- Take the 'Client ID' and 'Client Secret'
Connect a Gmail account
- Open the Google OAuth 2.0 Playground
- Click on settings and select 'Use your own OAuth credentials'
- Enter your 'Client ID' and 'Client Secret' and click on 'close'
- In Step 1 select 'Gmail API v1' -> '.../gmail.send' and click on 'Authorize APIs'
- Authorize with your Gmail Account you want to send mails from
- In Step 2 click on 'Exchange authorization code for tokens'
- Click on Step 2 and take the 'Refresh Token'
Provider Configuration
Variable | Type | Description | Required | Default |
---|---|---|---|---|
provider | string | The name of this provider 'google' | yes | |
providerOptions | object | Provider options | yes | |
providerOptions.auth.userId | string | The mail address of the Google account to send e-mails from | yes | |
providerOptions.auth.clientId | string | OAuth 2.0 Client ID | yes | |
providerOptions.auth.clientSecret | string | OAuth 2.0 Client Secret | yes | |
providerOptions.auth.refreshToken | string | OAuth 2.0 Refresh Token | yes | |
settings | object | Settings | yes | |
settings.defaultFrom | string | Default sender mail address | no | |
settings.defaultReplyTo | string | The receiver is asked to reply to | no |
Provider Configuration Example
config/plugins.js
module.exports = ({ env }) => ({
email: {
config: {
provider: 'gmail-api',
providerOptions: {
auth: {
userId: env('EMAIL_OAUTH2_USERID'),
clientId: env('EMAIL_OAUTH2_CLIENTID'),
clientSecret: env('EMAIL_OAUTH2_CLIENTSECRET'),
refreshToken: env('EMAIL_OAUTH2_REFRESHTOKEN'),
},
},
settings: {
defaultFrom: env('EMAIL_FROM'),
defaultReplyTo: env('EMAIL_REPLYTO'),
testAddress: env('EMAIL_TEST_ADDRESS'),
},
},
},
});
.env
EMAIL_FROM=Example Inc. <foo@my-domain.com>
EMAIL_REPLYTO=Example Inc. <foo@my-domain.com>
EMAIL_TEST_ADDRESS=foo@my-domain.com
EMAIL_OAUTH2_USERID=foo@my-domain.com
EMAIL_OAUTH2_CLIENTID=123....321.apps.googleusercontent.com
EMAIL_OAUTH2_CLIENTSECRET=ABC123...
EMAIL_OAUTH2_REFRESHTOKEN=1//123XYZ...