@webbers/mailgun-notification-medusa
v1.1.2
Published
The Mailgun notification provider plugin for Medusa v2
Maintainers
Readme
Table of Contents
Prerequisites
- Node.js v20 or higher
- Medusa server v2.3.0 or higher
- A Mailgun account and API key and domain
[!NOTE] If you use Mailgun's EU-hosted infrastructure, you need this url as the api_url: https://api.eu.mailgun.net
Installation
pnpm add @webbers/mailgun-notification-medusaConfiguration
Add the provider to the @medusajs/payment module in your medusa-config.ts file:
module.exports = defineConfig({
projectConfig: {
// ...
},
modules: [
// ... other modules
{
resolve: "@medusajs/medusa/notification",
options: {
providers: [
{
resolve:
"@webbers/mailgun-notification-medusa/providers/notification-mailgun",
id: "notification-mailgun",
options: {
channels: ["email"],
apiKey: process.env.MAILGUN_API_KEY,
domain: process.env.MAILGUN_DOMAIN,
from_email: process.env.MAILGUN_FROM,
api_url: process.env.MAILGUN_API_URL, // Only required if using Mailgun's EU-hosted infrastructure
templates: {
"<template-name>": {
subject: "<subject-function>",
template: "<template-function>",
},
},
default_locale: "nl",
},
},
],
},
},
]
})Configuration Options
| Option | Description | Default |
|------------------|-----------------------------------|----------|
| apiKey | Your Mailgun API key | Required |
| domain | Your Mailgun domain | Required |
| from_email | Your from email address | Required |
| templates | Your email template functions | Required |
| default_locale | The default locale for the emails | Required |
| api_url | The API url of mailgun | Optional |
Environment Variables
Create or update your .env file with the following variables:
MAILGUN_API_KEY="<your-mailgun-api-key>"
MAILGUN_DOMAIN="<your-mailgun-domain>"
MAILGUN_FROM="<your-mailgun-from-email>"
MAILGUN_API_URL="<your-api-url>"Usage
To set up up your email templates two functions are required per template:
- A function that takes a locale as a parameter and returns the subject of the email
- A function that takes the props of the email as a parameter and returns the template of the email For example you could set it up like this:
- In the src directory of your medusa server create a directory called
emails - Inside the emails directory create a file called
order-placed.tsx - Inside the order-placed.tsx file add the following code:
import * as React from "react"
import {
Html,
Head,
Preview,
Body,
Container,
Heading,
Text,
} from "@react-email/components"
export const getOrderPlacedTemplate = () => (
<Html>
<Head/>
<Preview>Your order is confirmed</Preview>
<Body>
<Container>
<Heading>Thanks for your order!</Heading>
<Text>Order #12345 has been confirmed.</Text>
<Text>Total: $59.99</Text>
</Container>
</Body>
</Html>
)
export const orderPlacedSubject = (locale: string) => {
switch (locale) {
case "nl":
return "Bestelling bevestigd"
case "en":
return "Order Confirmation"
}
}- In the
medusa-config.tsfile add the following code:
module.exports = defineConfig({
projectConfig: {
// ...
},
modules: [
// ... other modules
{
resolve: "@medusajs/medusa/notification",
options: {
providers: [
{
resolve:
"@webbers/mailgun-notification-medusa/providers/notification-mailgun",
id: "notification-mailgun",
options: {
channels: ["email"],
apiKey: process.env.MAILGUN_API_KEY,
domain: process.env.MAILGUN_DOMAIN,
from_email: process.env.MAILGUN_FROM,
api_url: process.env.MAILGUN_API_URL, // Only required if using Mailgun's EU-hosted infrastructure
templates: {
"order-placed": {
subject: orderPlacedSubject,
template: getOrderPlacedTemplate,
},
},
default_locale: "nl",
},
},
],
},
},
]
})Local development and customization
In case you want to customize and test the plugin locally, refer to the Medusa Plugin docs.
