mailpit-api
Version:
A TypeScript client for interacting with Mailpit's REST API.
100 lines (73 loc) • 3.29 kB
Markdown
[](https://www.npmjs.com/package/mailpit-api)
[](https://github.com/mpspahr/mailpit-api/actions/workflows/npm-publish.yml)
[](https://codecov.io/gh/mpspahr/mailpit-api)
[](https://mpspahr.github.io/mailpit-api/)
A TypeScript client for interacting with [Mailpit](https://mailpit.axllent.org/)'s [REST API](https://mailpit.axllent.org/docs/api-v1/view.html#get-/api/v1/info). Ideal for automating your email testing.
```bash
npm install mailpit-api
```
[](https://mpspahr.github.io/mailpit-api/), including all available methods and type definitions, is available.
**Prerequisites:** These examples require a Mailpit installation. See the [Mailpit installation guide](https://mailpit.axllent.org/docs/install/).
```typescript
import { MailpitClient } from "mailpit-api";
// Initialize the API client
const mailpit = new MailpitClient("http://localhost:8025");
// Send a message
await mailpit.sendMessage({
From: { Email: "user@example.test" },
To: [{ Email: "rec@example.test" }],
Subject: "Test Email",
});
// Get a summary of all messages
const messages = await mailpit.listMessages();
// Delete all messages
await mailpit.deleteMessages();
```
Use `mailpit-api` with [Playwright](https://playwright.dev/) as a custom [test fixture](https://playwright.dev/docs/test-fixtures) to handle email testing.
```typescript
// fixtures.ts
import { test as base } from "@playwright/test";
import { MailpitClient } from "mailpit-api";
type MyFixtures = {
mailpit: MailpitClient;
};
export const test = base.extend<MyFixtures>({
mailpit: async ({}, use) => {
const mailpit = new MailpitClient("http://localhost:8025");
await mailpit.deleteMessages();
await use(mailpit);
mailpit.disconnect();
},
});
export { expect } from "@playwright/test";
```
```typescript
// tests/register.spec.ts
import { test, expect } from "../fixtures";
test("should receive welcome email after registration", async ({
page,
mailpit,
}) => {
// Start waiting for the new email event before triggering the action
const emailPromise = mailpit.waitForEvent("new");
// Register a new user
await page.goto("/register");
await page.getByTestId("email").fill("test@example.test");
await page.getByTestId("password").fill("password123");
await page.getByTestId("submit").click();
// Wait for success message on page
await expect(page.getByTestId("success-message")).toBeVisible();
// Wait for the new email event (up to 5 seconds by default)
const event = await emailPromise;
// Verify the email from the event data
expect(event.Data.To[0].Address).toBe("test@example.test");
expect(event.Data.From.Address).toBe("no-reply@your-app.test");
expect(event.Data.Subject).toBe("Welcome to Our App");
});
```