One login for every app.
The username is always notix and the password is an API key. Create a key per application, revoke it when the application goes, and the relay login goes with it.
Notix's SMTP relay service accepts mail from any framework, CMS or script that can speak SMTP, and turns each message into the same send the email API makes: authenticated with your verified domain, checked against your suppression list, tracked, and reported through webhooks. It is for teams whose stack already has a mailer configured and who want to change one settings block rather than write a client. Transactional mail such as receipts and alerts belongs on the transactional email API when you need idempotency keys; everything else works over SMTP as it is.
The username is always notix and the password is an API key. Create a key per application, revoke it when the application goes, and the relay login goes with it.
Mail leaves under a domain you verified, with SPF and DKIM in place, so receiving networks can check that it is yours. An unverified From address is refused, not sent.
An address that bounced or unsubscribed is skipped whether the message arrived over SMTP or the API. The list is one list, shared across transactional and marketing mail.
Delivered, bounced and complained events reach your webhook endpoints, and every message shows in the dashboard with its status, the same as an API send.
465 with implicit TLS, or 587 with STARTTLS. Pick whichever your client defaults to; there is no plain-text option.
20 MB per message, 7 MB per attachment, 10 MB of attachments together. The relay advertises the size limit through the SMTP SIZE extension so a client can refuse early.
Host smtp.usenotix.dev, port 465 or 587, username notix, and an API key as the password. Every sample below is the whole change.
import nodemailer from "nodemailer";
const transporter = nodemailer.createTransport({
host: "smtp.usenotix.dev",
port: 465,
secure: true, // implicit TLS on 465; use port 587 with secure: false for STARTTLS
auth: {
user: "notix",
pass: process.env.NOTIX_API_KEY,
},
});
await transporter.sendMail({
from: "receipts@acme.com",
to: "customer@example.com",
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
});
# settings.py
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.usenotix.dev"
EMAIL_PORT = 587
EMAIL_USE_TLS = True # STARTTLS on 587
EMAIL_HOST_USER = "notix"
EMAIL_HOST_PASSWORD = os.environ["NOTIX_API_KEY"]
DEFAULT_FROM_EMAIL = "receipts@acme.com"
# anywhere in your app
from django.core.mail import send_mail
send_mail("Your receipt", "Thanks for your order.", None, ["customer@example.com"])
# .env
MAIL_MAILER=smtp
MAIL_HOST=smtp.usenotix.dev
MAIL_PORT=465
MAIL_ENCRYPTION=tls
MAIL_USERNAME=notix
MAIL_PASSWORD=${NOTIX_API_KEY}
MAIL_FROM_ADDRESS=receipts@acme.com
MAIL_FROM_NAME="Acme"
# anywhere in your app
Mail::to("customer@example.com")->send(new ReceiptMail($order));
# Any SMTP plugin's settings screen, or the constants it reads:
SMTP host: smtp.usenotix.dev
SMTP port: 465 (SSL/TLS) or 587 (STARTTLS)
Authentication: on
Username: notix
Password: an API key from Settings, API keys
From address: an address on a domain you verified in Notix
Your framework opens a TLS connection to smtp.usenotix.dev, logs in as notix with an API key, and hands over the message exactly as it would to any SMTP server. Nothing about your code changes.
The relay parses the message (headers, HTML and text bodies, attachments) and posts it to the send API with your key. From here it is indistinguishable from a JSON call: domain authentication, suppression, tracking and rate limits all apply.
The message is delivered under your verified domain, its status appears in the dashboard, and delivered, bounce and complaint events go to your webhooks.
The host is smtp.usenotix.dev for every plan. Port 465 expects TLS from the first byte (implicit TLS), which is what most mail libraries mean by secure: true orSSL. Port 587 starts in plain text and upgrades with STARTTLS, which is what EMAIL_USE_TLS in Django and MAIL_ENCRYPTION=tls in Laravel select. Port 25 is not published: it is the port networks block by default, and a relay that listened on it would only teach you to fight your host's firewall.
The username is the fixed string notix. The password is an API key, created under Settings, API keys in the dashboard. The relay does not keep a password store of its own: it forwards the key to the API, and the API decides whether it is valid. Rotating the key rotates the SMTP login; deleting the key ends it. Give each application its own key so one leak costs one application.
Both ports present a certificate for smtp.usenotix.dev issued by a public authority, so leave certificate verification on. A client configured to skip verification would accept any server that answered on the host, which is the one thing the certificate is there to prevent.
An SMTP session ends with an accepted message and a queue id. Behind that, the relay has produced the same request the email API takes, so what you get back is not a mail log line but a message with a status, events and a place in your dashboard. If you later want idempotency keys or scheduled sends, the same key that logged you in over SMTP works against the API.
Free: 5,000 emails a month, 200 a day, no card, no end date.
Pro: $15 a month for 50,000 emails, usage past that on the same invoice.
WordPress, a shop platform or a ticketing system that sends mail through whatever SMTP settings it is given. Fill in four fields and its order confirmations and password resets go out under your domain.
Django, Laravel, Rails or Spring apps that already call their framework's mail function. Swap the transport in settings and every existing call is now a tracked send.
A nightly report or an alert script that shells out to a mail command. A relay login is all it needs; no SDK to install.
If you are leaving another SMTP provider, the change is the host, the port and the login; nothing in your application changes. See the SendGrid alternative or the Resend alternative page for the details.
| Item | Limit | Where it is set |
|---|---|---|
| Recipients | 50 per message across to, cc and bcc; each one counts as an email | POST /v1/emails, and RCPT TO on the SMTP relay |
| Ports | 465 with implicit TLS, or 587 with STARTTLS | Your mailer's transport settings |
| Credentials | Username notix, an API key as the password | Your mailer's auth settings |
One JSON API for transactional and marketing email: send, batch, schedule, webhooks, typed SDKs.
ProductOTPs, receipts and alerts with idempotency keys, a deliverability pre-check and a shared suppression list.
NotixA free plan with no card, and Pro at $15 a month for 50,000 emails. Only sent volume is metered.
NotixThe quickstart: verify a domain, copy an API key, send the first email.
AlternativesSame $15 entry, 50,000 emails instead of 10,000, and a suppression list shared across transactional and marketing.
Verify a domain, create an API key, paste the host and port into your mailer. The free plan does not ask for a card.