• Модуль интеграций
  • Сообщество
  • Блог
Документация
Плагины и интеграцииВсе расширения для Medusa от сообществаСтартерыЗапускайте проекты быстрее с готовыми решениями
ЭкспертыПодберите специалиста для разработки и развития вашего проекта на MedusaКейсыПосмотрите примеры Medusa в продакшене и успешные внедрения
Т-Касса от Т-Банка для Medusa: приём платежей для РФ

16 октября 2026 г. · Продукт

Gorgo снижает затраты на адаптацию Medusa к локальным рынкам.

Мы разрабатываем плагины интеграции, осуществляем поддержку и развиваем сообщество разработчиков на Medusa в Telegram.

  • Ресурсы Medusa
  • Плагины и интеграции
  • Модуль интеграций
  • Стартеры
  • Эксперты
  • Кейсы
  • Medusa Чат в Telegram
  • Medusa Новости в Telegram
  • Документация Gorgo
  • Связаться с нами
  • TelegramGitHub
Плагины
S

Smtp senpai

Medusa v2 notification module provider for SMTP Senpai by MailSenpai: send order and customer emails on the email channel through the EU SMTP relay API.

npm install medusa-plugin-smtp-senpai
Категория
Уведомления
Создано
Mailsenpai
Версия
1.0.1
Последнее обновление
3 дня назад
Ежемесячные загрузки
Загрузка данных
Звезды на Github
0
npmNPMGitHubGithub

medusa-plugin-smtp-senpai

Medusa v2 Notification Module Provider for SMTP Senpai, the EU SMTP relay and email API by MailSenpai. It handles the channel: order confirmations, password resets, invites and any notification you create with the Notification Module go out through the SMTP Senpai REST API.

Requires Medusa 2.x and Node.js 20+.

Prerequisites

  • An SMTP Senpai account with a verified sending domain
  • An API key () from the MailSenpai customer area, SMTP Senpai page

Install

Configure

Register the provider in the Notification Module, in :

Medusa allows one provider per channel: remove any other provider registered for .

optionrequireddescription
yes
yesAPI key (default: )
yesdefault sender, or
nosender name when has none
nodefault Reply-To
notemplates by name, used when a notification has no
, , noclient settings (retries only on 5xx and network errors)

Send a notification

With ready-made content (for example rendered with React Email in your subscriber):

Templates in the provider options

When a notification has no , the provider looks up . A template is either strings with placeholders filled from (values are HTML-escaped in ), or a function:

Result and errors

  • On success the notification gets the SMTP Senpai Message-ID as .
  • API errors (for example an unverified sender domain) are thrown as with the API message, so the notification is marked as failed.
  • A recipient on the SMTP Senpai suppression list is not emailed and the notification fails with the reason.

Links

  • SMTP Senpai: https://en.mailsenpai.com/smtp-senpai/
  • API documentation: https://en.mailsenpai.com/smtp-api/
  • All MailSenpai integrations: https://en.mailsenpai.com/integrations/
  • Source code and issues: https://gitlab.com/smtp-senpai/mailsenpai-js/-/tree/main/medusa-plugin-smtp-senpai
  • Support: https://en.mailsenpai.com/contact-us/

License

MIT © MailSenpai

First received message and troubleshooting

Use a demo order on staging and trigger its notification subscriber. Confirm that the email channel selects this provider and that its external_id is recorded. Installing the provider does not create an order subscriber or a template for your store.

A relay/API acceptance result is distinct from inbox placement. Check the actual received message and its authentication headers. Keep API keys and customer data out of public screenshots and logs.

If authentication fails, check the key and account state. For a sender-domain rejection, verify the sender domain. For quota/rate errors, respect the response and the plan limit rather than retrying blindly. For a timeout, check outbound HTTPS access. Use a stable idempotency key for retries where the integration exposes it.

Package catalogue · API errors and delivery events · Integration guides

Service logs are retained for 7 days on the free plan and 90 days on paid plans. Local application logs may have different retention.

Еще в этой категории

Посмотреть все
Уведомления
Nodemailer logo

Nodemailer

От Perseides

Отправляйте email-уведомления через Nodemailer (SMTP)

Загрузка данных
npm
Уведомления
Mailgun logo

Mailgun

От Webbers

Отправляйте и управляйте уведомлениями по электронной почте

Загрузка данных
GitHubnpm
Уведомления
Postmark logo

Postmark

От Bram-hammer

Транзакционные письма через Postmark

Загрузка данных
GitHubnpm
1npm install medusa-plugin-smtp-senpai
2# or
3yarn add medusa-plugin-smtp-senpai
1import { defineConfig, Modules } from '@medusajs/framework/utils'
2
3module.exports = defineConfig({
4 // ...
5 modules: [
6 {
7 resolve: '@medusajs/medusa/notification',
8 options: {
9 providers: [
10 {
11 resolve: 'medusa-plugin-smtp-senpai',
12 id: 'smtp-senpai',
13 options: {
14 channels: ['email'],
15 api_key: process.env.SMTP_SENPAI_API_KEY,
16 from: 'Your shop <orders@yourdomain.com>', // verified domain
17 reply_to: 'support@yourdomain.com', // optional
18 // templates: { ... } // optional, see below
19 },
20 },
21 ],
22 },
23 },
24 ],
25})
1import { Modules } from '@medusajs/framework/utils'
2
3const notificationModuleService = container.resolve(Modules.NOTIFICATION)
4
5await notificationModuleService.createNotifications({
6 to: order.email,
7 channel: 'email',
8 template: 'order-placed',
9 content: {
10 subject: `Order #${order.display_id} confirmed`,
11 html: '<p>Thanks for your order.</p>',
12 text: 'Thanks for your order.',
13 },
14 attachments: [
15 { filename: 'invoice.pdf', content: pdfBase64, content_type: 'application/pdf' },
16 ],
17 provider_data: {
18 idempotency_key: `order-placed-${order.id}`, // optional: never sent twice within 24 h
19 headers: { 'X-Order': String(order.display_id) }, // optional, X- headers only
20 reply_to: 'orders@yourdomain.com', // optional
21 },
22})
1options: {
2 channels: ['email'],
3 api_key: process.env.SMTP_SENPAI_API_KEY,
4 from: 'orders@yourdomain.com',
5 templates: {
6 'order-placed': {
7 subject: 'Order #{{ order.display_id }} confirmed',
8 html: '<p>Hi {{ customer.first_name }}, thanks for your order.</p>',
9 text: 'Hi {{ customer.first_name }}, thanks for your order.',
10 },
11 'password-reset': (data) => ({
12 subject: 'Reset your password',
13 html: `<a href="${data.url}">Reset password</a>`,
14 }),
15 },
16}
1await notificationModuleService.createNotifications({
2 to: customer.email,
3 channel: 'email',
4 template: 'order-placed',
5 data: { order: { display_id: order.display_id }, customer: { first_name: customer.first_name } },
6})