SMTP relay
Send through Ritto Mail from any app that speaks SMTP — Supabase, n8n, WordPress, Nodemailer and more.
Apps that can't call an HTTP API can send through the Ritto Mail SMTP relay. Messages go through the same pipeline as the Emails API: same domains, suppressions, webhooks, logs and plan limits.
Connection settings
| Setting | Value |
|---|---|
| Host | smtp.ritto.email |
| Port | 465, 587 or 2587 — see the table below |
| Username | ritto-mail |
| Password | any API key from API keys in the dashboard (rm_…) |
| Port | Security | When to use it |
|---|---|---|
465 | SSL/TLS (implicit TLS — encrypted from the first byte) | Apps that ask for "SSL", "SSL/TLS" or secure: true, such as Supabase |
587 | STARTTLS (plain connection upgraded to TLS before authentication) | Apps that ask for "STARTTLS" or "TLS" |
2587 | STARTTLS | Fallback when your network blocks 587 |
Every port requires TLS before authentication; the API key never travels in the clear. The From address must use a domain that is verified in the same team as the API key.
Migrating from Resend
If your app already sends through smtp.resend.com, change only three fields:
| Field | Resend | Ritto Mail |
|---|---|---|
| Host | smtp.resend.com | smtp.ritto.email |
| Port | 465 | 465 (unchanged) — 587 also works |
| Username | resend | ritto-mail |
| Password | your Resend API key (re_…) | your Ritto Mail API key (rm_…) |
Security stays the same (SSL/TLS on 465, STARTTLS on 587). Verify your sending domain in Domains before switching, or messages are rejected.
Supabase (Auth emails)
In Supabase → Project Settings → Authentication → SMTP Settings, enable custom SMTP and fill in:
- Sender email:
no-reply@yourdomain.com(a verified domain) - Host:
smtp.ritto.email· Port:465 - Username:
ritto-mail· Password: your API key
Supabase uses implicit TLS on 465, the same setting Resend recommends; 587 also works.
Nodemailer
import nodemailer from "nodemailer";
// Port 465: implicit TLS.
const transport = nodemailer.createTransport({
host: "smtp.ritto.email",
port: 465,
secure: true,
auth: { user: "ritto-mail", pass: process.env.RITTO_MAIL_API_KEY },
});
// Or port 587: STARTTLS.
// nodemailer.createTransport({ host: "smtp.ritto.email", port: 587, secure: false, requireTLS: true, auth: { ... } });
await transport.sendMail({
from: "Acme <orders@acme.dev>",
to: "jane@example.com",
subject: "Your order is confirmed",
html: "<p>Thanks for your order!</p>",
});n8n, WordPress and others
Use the generic SMTP credential of the tool with the settings above. Pick
SSL/TLS with port 465, or STARTTLS (sometimes labelled "TLS") with
port 587. Mixing them (SSL on 587, STARTTLS on 465) fails at connect time.
Troubleshooting
- Connection hangs or "wrong version number" / handshake errors: the
security mode doesn't match the port. Use SSL/TLS with
465and STARTTLS with587or2587. - Connection times out on 587: some hosting providers block outbound 587.
Use port
465or2587. - Authentication failed: the password must be a valid, non-revoked API key;
the username is always
ritto-mail(notresend). - Rejected sender: verify the From domain in Domains first.
- No active plan: sending requires an active subscription — see Billing.