Messaging

Transactional e-mails
for Medusa

The store's e-mails through Resend: order confirmation, shipping with tracking numbers, cancellation, welcome and password reset, in Polish and English, in your store's look and with a dark mode. Each goes out exactly once, and the admin shows what went out.

See it in the demo admin
E-mails: The integration page in the Medusa admin, demo mode with sample data.
The integration page in the Medusa admin, demo mode with sample data.

What exactly
this integration does

  • Five templates out of the box

    Order confirmation with the products and totals, shipping with every tracking number and its link, cancellation, a welcome for new accounts and password reset. Abandoned cart and negotiation e-mails you turn on when you want them.

  • Live preview

    Every template in the admin exactly as the customer gets it: light and dark, desktop and phone, Polish and English, on sample data or on your newest order.

  • Your store's look

    Name, a live-text logo, colours, footer and support address from the admin or the options. Text colours pick their own contrast so everything stays readable.

  • The recipient's language

    Each e-mail goes out in the language of the order, the cart or the customer, and Polish texts never leave a one-letter word at the end of a line.

  • Test and retry from the admin

    A test send takes the same road as real e-mails, so it proves the setup at once. A failed e-mail is retried with one click.

  • E-mails on the order

    Every order page shows its e-mails with their status, and your own templates come in the same look.

How it guards
your data

  • Exactly once per event

    One key per event, checked by Medusa's notification module, claimed in the plugin's send log and sent to Resend as the Idempotency-Key. A repeated event never sends a second e-mail.

  • Masked addresses

    The log keeps the template, the subject, the status and the Resend id, and the recipient only as a***@e***.com.

  • No key, nothing leaves

    Without an API key every e-mail is only rendered and recorded as not sent, and demo mode keeps everything on the server.

  • Test limits

    At most 5 tests per person in 10 minutes and 30 an hour for the store, so the admin never becomes a way to send spam.

Setup
in three steps

The full list of options, events and API routes is in the package README on GitHub.

Paste it into Claude Code, Cursor or another AI assistant in your Medusa project: it installs and configures the integration, with writes off.

  1. 1
    Install the package from npm.
    npm install @koda-plus/medusa-plugin-emails
  2. 2
    Add the plugin to medusa-config.ts.
                            const emails = {
      apiKey: process.env.RESEND_API_KEY,
      from: process.env.EMAILS_FROM, // "Sklep <zamowienia@mail.twoj-sklep.pl>"
      defaultLocale: "pl",
    }
    
    plugins: [{ resolve: "@koda-plus/medusa-plugin-emails", options: emails }],
    modules: [
      {
        resolve: "@medusajs/medusa/notification",
        options: {
          providers: [
            {
              resolve: "@koda-plus/medusa-plugin-emails/providers/emails",
              id: "emails",
              options: { channels: ["email"], ...emails },
            },
          ],
        },
      },
    ],
                          
  3. 3
    Run the migrations and open the integration in the Medusa admin.
    npx medusa db:migrate

Running for our clients

See our portfolio
  • biolchecksoon
  • soon
  • soon
  • soon
  • soon
  • outside Medusa
  • outside Medusa
  • WJ Investmentoutside Medusa
  • Firma Inwestycyjna JWoutside Medusa

Outside Medusa: the same logic and the same code in a project on another stack.

Free 15-minute call

Tell us about your project,
we'll tailor the rest to you

A 15-minute call is enough for us to know whether we are a fit for your project.
We start from what you need, not from an off-the-shelf solution.

See our demo

Contact us

Remigiusz in a navy shirt and glasses
I use iMessage I use WhatsApp
Adrian in a grey turtleneck and glasses
I use iMessage I use WhatsApp