By MailChannels
Send Strapi emails through the MailChannels Email API. No runtime dependencies; clear send errors.
released November 4, 2026
npm install @mailchannels/strapi-provider-email-mailchannelsA Strapi email provider that sends through the MailChannels Email API (POST https://api.mailchannels.net/tx/v1/send). It has no dependencies and works on Node 20 or later with the global fetch.
npm install @mailchannels/strapi-provider-email-mailchannelsconfig/plugins.js:
module.exports = ({ env }) => ({
email: {
config: {
provider: '@mailchannels/strapi-provider-email-mailchannels',
providerOptions: { apiKey: env('MAILCHANNELS_API_KEY') },
settings: {
defaultFrom: 'Acme <no-reply@acme.example>',
defaultReplyTo: 'support@acme.example',
},
},
},
});Keep the API key in your deployment's secret store. The sender domain must be authorized for your MailChannels account, including its Domain Lockdown record.
to, cc, bcc and replyTo each accept any of:
a@b.c,Name <a@b.c>,{ address | email, name } objects.from and replyTo fall back to settings.defaultFrom and settings.defaultReplyTo.to address is required. A message with only Bcc recipients is refused. The subject must be a single line, so header injection is refused. At least one of text or html is required. Plain text is sent before HTML.content (a Buffer or string; use encoding: 'base64' for base64 strings) is accepted, up to 10 MiB each. path and href attachments are refused rather than fetched.send resolves to { accepted: true, requestId }. Acceptance is not delivery.MailChannelsEmailError with status and uncertain fields:
uncertain: false (4xx, or a per-recipient failed): MailChannels refused the email.uncertain: true (5xx, timeout or network failure): the email may have been accepted. The provider never retries, so a caller that retries could send a duplicate.Report bugs in this repository's issue tracker. For account questions, contact MailChannels support at https://support.mailchannels.com/. Never include your API key.
MIT. See LICENSE.
npm testThe 6 tests use a mocked fetch and cover:
settings;path/URL attachments;Negative controls: allowing path attachments fails the input test, and treating 503 as accepted fails the outcome test.
Native Strapi check (2026-10-10): a Strapi 5.57.0 app was booted with this package configured exactly as above and a local Email API mock (Docker --network none). All 10 tests pass:
send and sendTemplatedEmail map defaults, recipients and content;Forcing the fixture back to the Nodemailer composition fails 5 of them.
The provider has not yet been exercised against the live Email API.
Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.
Submit
