Neuctra Mailer
Transactional email

A transactional email API that sends through your own SMTP

Transactional emails are the ones your app sends to one person because of something they did: a password reset, an order confirmation, a receipt or a login alert. Neuctra Mailer gives you an API and SDK for them that sends through the SMTP account you already have, with retries that never send twice and errors that say how to fix the problem.

What is a transactional email?

A transactional email is triggered by a user's action and sent to that one person, as opposed to a marketing email sent to a whole list. People expect them quickly and reliably, so they need clear failure handling more than design tools.

  • Password resets and email verification
  • Order confirmations, shipping updates and receipts
  • Booking and appointment reminders
  • Account and security alerts
  • Contact form notifications

Send a password reset email safely

Call it from your backend with the server key. The idempotency key means a retry after a timeout returns the first result instead of emailing the user twice.

import { NeuctraMailer, NeuctraMailerError } from "@neuctra/mailer";

try {
  await mailer.send(
    {
      to: user.email,
      subject: "Reset your password",
      html: `<p><a href="${resetUrl}">Choose a new password</a>. This link expires in 1 hour.</p>`,
      text: `Choose a new password: ${resetUrl}`,
    },
    // Retrying with the same key within 24 hours never sends a second email.
    { idempotencyKey: `password-reset-${token.id}` },
  );
} catch (err) {
  if (err instanceof NeuctraMailerError) {
    console.error(err.status, err.message, err.diagnosis?.title, err.requestId);
  }
}

Built for reliable transactional email

  • Temporary failures (a busy server, a dropped connection before sending) are retried up to 3 times, never in a way that could deliver twice
  • Idempotency keys: a repeat within 24 hours returns the first result
  • Every failure explains what went wrong and how to fix it, with provider-specific advice
  • Email log of every send with the SMTP server's reply, never the email content
  • Webhooks for sent, failed and bounced emails, signed so you can verify them
  • Several SMTP accounts with automatic failover on paid plans

Develop without emailing real users

The test key (nm_test_...) checks and logs every request like a real one but delivers nothing, except to the test addresses you list, so you can still see emails arrive in your own inbox. Send to [email protected] to try your error handling. Test emails that aren't delivered don't count toward your plan.

Why use your own SMTP for transactional email?

Your emails go out from your own address and provider, so replies and sent folders stay where your team already works, and your sending reputation is yours. There is no per-email delivery charge from Neuctra Mailer: plans set monthly limits, starting with 1,000 emails a month free.

Frequently asked questions

What's the difference between transactional and marketing email?
Transactional email goes to one person because of something they did, like resetting a password. Marketing email goes to many people to promote something, and needs consent and an unsubscribe link. Neuctra Mailer does both, and only marketing email is blocked for people on the do-not-send list.
Which languages can I use?
The @neuctra/mailer SDK works in Node.js 18+, Next.js, React and browser JavaScript, with TypeScript types. Any other language can call the REST API with an HTTP POST.
Can I send transactional email from the browser?
For emails to your own address, such as a contact form, yes, with the public key limited to your websites and recipients. Emails to customers should be sent from your server with the server key, which browsers can't use.
Is there a free plan?
Yes. The Free plan includes 1,000 emails a month and one service, with the full SDK, email log and test key.
Ready when you are

Send your first email today

Create a service, add your SMTP login and send a test. It takes about two minutes.