Skip to content

SMTP Server ​

Mailisk SMTP is a catch-all SMTP server for testing. Point your app at it and every email it sends is captured, even when the recipient is a real address like jane@gmail.com. Nothing is delivered to a real inbox, so you can test sign-ups, password resets and receipts with production-like data.

Credentials ​

Each namespace has its own SMTP credentials. Find them in the dashboard under Namespaces → (your namespace) → Settings → SMTP.

SettingValue
Hostsmtp.mailisk.net
Port587 with STARTTLS, or 465 with TLS
Username{namespace}@mailisk.net
PasswordShown on the SMTP tab. Reset SMTP password rotates it.

Authentication is required on both ports and only works over an encrypted connection.

Where emails land ​

Mailisk decides per recipient:

RecipientResult
Any address outside Mailisk, e.g. jane@gmail.comCaptured in the namespace you logged in with.
An address in a Mailisk namespace, e.g. john@example.mailisk.netCaptured in that namespace, the same as port 25.
An address on a verified custom domainCaptured in the namespace the domain belongs to.
An unknown namespace, e.g. john@typo.mailisk.netRejected with 550.

An email with several recipients is stored once per recipient, under that recipient's address. The namespace's quota, block status and sender filtering apply to every captured email, external recipients included.

Finding captured emails ​

Captured emails show up in the namespace inbox in the dashboard like any other email. With the API, filter by the recipient address:

shell
curl --request GET \
     --url https://api.mailisk.com/api/emails/{namespace}/inbox \
     --header 'X-Api-Key: {Api Key}' \
     --get \
     --data-urlencode 'to_addr_prefix=jane@gmail.com'

See Search Inbox for every filter, and for waiting until an email arrives.

With the MCP server, pass the address and the namespace to wait_for_email or search_emails. Mailisk can't tell which namespace an outside address belongs to, so the namespace is required for those addresses.

Example ​

Nodemailer, sending a password reset to a real-looking address:

js
import nodemailer from 'nodemailer';

const transport = nodemailer.createTransport({
  host: 'smtp.mailisk.net',
  port: 587,
  auth: {
    user: 'example@mailisk.net',
    pass: process.env.MAILISK_SMTP_PASSWORD,
  },
});

await transport.sendMail({
  from: 'no-reply@yourapp.com',
  to: 'jane@gmail.com',
  subject: 'Reset your password',
  text: 'Your code is 123456',
});
// Captured in the "example" namespace. jane@gmail.com never receives it.