Ritto Mail Docs

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

SettingValue
Hostsmtp.ritto.email
Port465, 587 or 2587 — see the table below
Usernameritto-mail
Passwordany API key from API keys in the dashboard (rm_…)
PortSecurityWhen to use it
465SSL/TLS (implicit TLS — encrypted from the first byte)Apps that ask for "SSL", "SSL/TLS" or secure: true, such as Supabase
587STARTTLS (plain connection upgraded to TLS before authentication)Apps that ask for "STARTTLS" or "TLS"
2587STARTTLSFallback 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:

FieldResendRitto Mail
Hostsmtp.resend.comsmtp.ritto.email
Port465465 (unchanged) — 587 also works
Usernameresendritto-mail
Passwordyour 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 465 and STARTTLS with 587 or 2587.
  • Connection times out on 587: some hosting providers block outbound 587. Use port 465 or 2587.
  • Authentication failed: the password must be a valid, non-revoked API key; the username is always ritto-mail (not resend).
  • Rejected sender: verify the From domain in Domains first.
  • No active plan: sending requires an active subscription — see Billing.

On this page