4.3 KiB
Thanks to the plugin Email, you can send email from your server or externals providers such as Sendgrid.
Programmatic usage
In your custom controllers or services you may want to send email. By using the following function, strapi will use the configured provider to send an email.
await strapi.plugins['email'].services.email.send({
to: 'paulbocuse@strapi.io',
from: 'joelrobuchon@strapi.io',
replyTo: 'no-reply@strapi.io',
subject: 'Use strapi email provider successfully',
text: 'Hello world!',
html: 'Hello world!',
});
Configure the plugin
The plugin provide you a setting page to be able to define the email provider you want to use. You will also be able to add some configuration.
- Click on Plugins in the left menu
- Click on the cog button on the Email plugin line
Install new providers
By default Strapi provides a local email system. You might want to send email with a third party.
You can check all the available providers developed by the community on npmjs.org - Providers list
To install a new provider run:
:::: tabs
::: tab yarn
yarn add strapi-provider-email-sendgrid@beta --save
:::
::: tab npm
npm install strapi-provider-email-sendgrid@beta --save
:::
::::
::: tip
If the provider is not in the mono repo, you probably don't need @beta depending if the creator published it with this tag or not.
:::
Then, visit http://localhost:1337/admin/plugins/email/configurations/development on your web browser and configure the provider.
Create new provider
If you want to create your own, make sure the name starts with strapi-provider-email- (duplicating an existing one will be easier), modify the auth config object and customize the send function.
Default template
module.exports = {
provider: 'provider-id',
name: 'display name',
auth: {
config_1: {
label: 'My Config 1',
type: 'text',
},
},
init: config => {
return {
send: async options => {},
};
},
};
In the send function you will have access to:
configthat contain configuration you setup in your admin paneloptionsthat contain option your send when you called thesendfunction from the email plugin service
To use it you will have to publish it on npm.
Create a local provider
If you want to create your own provider without publishing it on npm you can follow these steps:
- Create a
providersfolder in your application. - Create your provider as explained in the documentation eg.
./providers/strapi-provider-email-[...]/... - Then update your
package.jsonto link yourstrapi-provider-email-[...]dependency to the local path of your new provider.
{
...
"dependencies": {
...
"strapi-provider-email-[...]": "file:providers/strapi-provider-email-[...]",
...
}
}
- Finally, run
yarn installornpm installto install your new custom provider.
Trouble shooting
You received an Auth.form.error.email.invalid error even though the email is valid and exists in the database.
Here is the error response you get from the API.
{
"statusCode": 400,
"error": "Bad Request",
"message": [
{
"messages": [
{
"id": "Auth.form.error.email.invalid"
}
]
}
]
}
This error is due to your IP connection. By default, Strapi uses the sendmail package.
This package sends an email from the server it runs on. Depending on the network you are on, the connection to the SMTP server could fail.
Here is the sendmail error.
Error: SMTP code:550 msg:550-5.7.1 [87.88.179.13] The IP you're using to send mail is not authorized to
550-5.7.1 send email directly to our servers. Please use the SMTP relay at your
550-5.7.1 service provider instead. Learn more at
550 5.7.1 https://support.google.com/mail/?p=NotAuthorizedError 30si2132728pjz.75 - gsmtp
To fix it, I suggest you to use another email provider that uses third party to send emails.
When using a third party provider, you avoid having to setup a mail server on your server and get extra features such as email analytics.