SMTP
Host, port, and an API key. Every stack is on this page.
Connection
Username is always unitpost. Password is an API key with emails:send. TLS is required.
| Host | smtp.unitpost.com |
|---|---|
| Username | unitpost(always this literal value) |
| Password | Your Unitpost API key(must carry emails:send) |
| Port (STARTTLS) | 587(or 2587 if blocked) |
| Port (implicit TLS) | 465(or 2465 if blocked) |
| From address | Any address on a verified domain |
Nodemailer
Nodemailer is not deprecated. Create a transport with createTransport, point it at smtp.unitpost.com on port 587 (STARTTLS) or 465 (implicit TLS), and send from a verified domain. Port 25 is blocked on most clouds — don't use it. The same transport works in Express, Next.js, and NestJS.
Install Nodemailer
Add it to your Node.js project (Node 18+). The package is actively maintained.
Shellnpm install nodemailerCreate a transport
Point
createTransportatsmtp.unitpost.com. Use port 587 withsecure: falsefor STARTTLS, or port 465 withsecure: truefor implicit TLS. The username is alwaysunitpost; the password is your API key withemails:send.JavaScriptimport nodemailer from "nodemailer"; const transporter = nodemailer.createTransport({ host: "smtp.unitpost.com", port: 587, secure: false, requireTLS: true, auth: { user: "unitpost", pass: process.env.UNITPOST_API_KEY, }, });Port 25 vs 587: 25 is the legacy submission port and is blocked by AWS, GCP, and most VPS providers. 587 with STARTTLS is what you want. 465 is implicit TLS if 587 is filtered.
Send an email
The
fromaddress must be on a domain you've verified in Unitpost. This is the samesendMailcall in a Next.js Route Handler or a NestJS provider.JavaScriptawait transporter.sendMail({ from: "you@yourdomain.com", to: "customer@example.com", subject: "Hello from Unitpost", html: "<h1>Welcome!</h1><p>Sent via SMTP.</p>", });
Supabase
Point Supabase's custom SMTP at Unitpost so auth emails send from your own verified domain — and skip Supabase's built-in auth-email rate limits.
Open Supabase SMTP settings
In the Supabase dashboard go to Project Settings → Authentication → SMTP Settings and enable Custom SMTP.
Enter your Unitpost credentials
Host smtp.unitpost.com Port 587 Username unitpost Password Your Unitpost API key Sender email auth@yourdomain.com (verified) Sender name Your app name The sender email must be on a domain you've verified in Unitpost, or sends are rejected with a 550.
Save and send a test
Save the settings, then trigger a magic link or signup confirmation. Supabase renders its own auth templates; Unitpost just delivers them.
Confirm delivery
The auth email shows up in your Unitpost Activity view with full tracking.
Because delivery now runs through Unitpost, your plan's sending limits apply instead of Supabase's default auth-email throttle.
WordPress
WordPress sends mail via PHP's `mail()` by default, which most hosts deliver poorly. Route it through Unitpost SMTP with a plugin like WP Mail SMTP.
Install an SMTP plugin
From Plugins → Add New, install and activate WP Mail SMTP (or a comparable SMTP plugin).
Choose the "Other SMTP" mailer
In the plugin settings, pick the generic Other SMTP option (not a named provider).
Enter your Unitpost SMTP settings
SMTP Host smtp.unitpost.com Encryption TLS (STARTTLS) SMTP Port 587 Authentication On SMTP Username unitpost SMTP Password Your Unitpost API key From Email you@yourdomain.com (verified) Store the API key in the plugin's password field. Set the From Email to an address on your verified domain.
Send a test email
Use the plugin's Email Test tab to send yourself a message, then confirm it in your Unitpost Activity view.
Auth0
Configure a custom SMTP email provider in Auth0 so your tenant's emails deliver from your verified domain through Unitpost.
Open the email provider settings
In the Auth0 dashboard go to Branding → Email Provider (or Emails → Provider on older tenants) and choose SMTP.
Enter your Unitpost credentials
From you@yourdomain.com (verified) Host smtp.unitpost.com Port 587 Username unitpost Password Your Unitpost API key Save and send a test
Save the provider, then use Auth0's Send Test Email button to verify the connection.
Enable the emails you want
Under Branding → Email Templates, toggle on verification, welcome, password-reset, and other templates. Auth0 renders them; Unitpost delivers.
Rails
Set Action Mailer's SMTP settings to route your Rails app's mail through Unitpost. Same job as Nodemailer — different stack.
Configure Action Mailer
In your environment config (e.g.
config/environments/production.rb), set the delivery method and SMTP settings.Rubyconfig.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: "smtp.unitpost.com", port: 587, user_name: "unitpost", password: ENV["UNITPOST_API_KEY"], authentication: :plain, enable_starttls_auto: true, }Set your sender
Use a
fromaddress on a verified domain in your mailer.Rubyclass UserMailer < ApplicationMailer default from: "you@yourdomain.com" def welcome_email mail(to: "customer@example.com", subject: "Welcome!") end endDeliver and verify
Trigger the mailer (
UserMailer.welcome_email.deliver_now) and confirm the send in your Unitpost Activity view.
Laravel
Laravel reads SMTP settings from your `.env`. Point the mailer at Unitpost and send from a verified domain.
Set your mail environment variables
Add the following to your
.envfile.ShellMAIL_MAILER=smtp MAIL_HOST=smtp.unitpost.com MAIL_PORT=587 MAIL_USERNAME=unitpost MAIL_PASSWORD=${UNITPOST_API_KEY} MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=you@yourdomain.com MAIL_FROM_NAME="${APP_NAME}"MAIL_FROM_ADDRESS must be on a domain you've verified in Unitpost.
Clear the config cache
If you cache config in production, refresh it so the new values load.
Shellphp artisan config:clearSend and verify
Send a mailable (e.g.
Mail::to($user)->send(new WelcomeMail())) and confirm it in your Unitpost Activity view.
Django
Configure Django's built-in SMTP email backend to send through Unitpost. This is the same job as Nodemailer — Python instead of Node.
Configure your settings
Add the SMTP settings to
settings.py. Keep the API key in an environment variable.PythonEMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = "smtp.unitpost.com" EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = "unitpost" EMAIL_HOST_PASSWORD = os.environ["UNITPOST_API_KEY"] DEFAULT_FROM_EMAIL = "you@yourdomain.com"Send an email
Use
send_mailor anEmailMessage. The from address must be on a verified domain.Pythonfrom django.core.mail import send_mail send_mail( subject="Hello from Unitpost", message="Sent via SMTP.", from_email="you@yourdomain.com", recipient_list=["customer@example.com"], html_message="<h1>Welcome!</h1>", )Verify delivery
Check your Unitpost Activity view for the message and its status.
PHPMailer
Use PHPMailer's SMTP mode to deliver through Unitpost from plain PHP. Port 587 with STARTTLS; don't use port 25.
Install PHPMailer
Add it via Composer.
Shellcomposer require phpmailer/phpmailerConfigure and send
Set PHPMailer to SMTP mode with your Unitpost credentials.
PHP<?php use PHPMailer\PHPMailer\PHPMailer; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = "smtp.unitpost.com"; $mail->SMTPAuth = true; $mail->Username = "unitpost"; $mail->Password = getenv("UNITPOST_API_KEY"); $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; $mail->setFrom("you@yourdomain.com", "Your App"); $mail->addAddress("customer@example.com"); $mail->isHTML(true); $mail->Subject = "Hello from Unitpost"; $mail->Body = "<h1>Welcome!</h1><p>Sent via SMTP.</p>"; $mail->send();Verify delivery
The message appears in your Unitpost Activity view with full tracking.
Next.js
Send from a Next.js Route Handler with Nodemailer pointed at Unitpost SMTP. Keep the API key on the server — never in a Client Component.
Install Nodemailer
Shellnpm install nodemailer npm install -D @types/nodemailerCreate a Route Handler
Server-only. The
fromaddress must be on a verified domain.TypeScriptimport nodemailer from "nodemailer"; import { NextResponse } from "next/server"; const transporter = nodemailer.createTransport({ host: "smtp.unitpost.com", port: 587, secure: false, requireTLS: true, auth: { user: "unitpost", pass: process.env.UNITPOST_API_KEY, }, }); export async function POST() { await transporter.sendMail({ from: "you@yourdomain.com", to: "customer@example.com", subject: "Hello from Next.js", html: "<p>Sent via SMTP.</p>", }); return NextResponse.json({ ok: true }); }Verify delivery
Check Activity. Same transport as the Nodemailer guide — this page is the Next.js wiring.
NestJS
Inject a Nodemailer transport in NestJS and send over Unitpost SMTP. Same credentials as any other stack.
Install Nodemailer
Shellnpm install nodemailer npm install -D @types/nodemailerProvide a transporter
TypeScriptimport { Injectable } from "@nestjs/common"; import nodemailer from "nodemailer"; @Injectable() export class MailService { private transporter = nodemailer.createTransport({ host: "smtp.unitpost.com", port: 587, secure: false, auth: { user: "unitpost", pass: process.env.UNITPOST_API_KEY, }, }); sendWelcome(to: string) { return this.transporter.sendMail({ from: "you@yourdomain.com", to, subject: "Welcome", html: "<p>Sent via SMTP.</p>", }); } }Verify delivery
The send shows up in Activity. See also Nodemailer.
Express
Send from an Express route with Nodemailer pointed at Unitpost. Keep the key in env, not in the repo.
Install Nodemailer
Shellnpm install nodemailerSend from a route
JavaScriptimport express from "express"; import nodemailer from "nodemailer"; const transporter = nodemailer.createTransport({ host: "smtp.unitpost.com", port: 587, secure: false, requireTLS: true, auth: { user: "unitpost", pass: process.env.UNITPOST_API_KEY, }, }); const app = express(); app.post("/send", async (_req, res) => { await transporter.sendMail({ from: "you@yourdomain.com", to: "customer@example.com", subject: "Hello from Express", html: "<p>Sent via SMTP.</p>", }); res.json({ ok: true }); });Verify delivery
Confirm in Activity.
Python
Python's smtplib talks SMTP directly. Point it at Unitpost on port 587 with STARTTLS. Django and Flask wrap this; this page is the bare client.
Send with smtplib
Pythonimport os import smtplib from email.message import EmailMessage msg = EmailMessage() msg["From"] = "you@yourdomain.com" msg["To"] = "customer@example.com" msg["Subject"] = "Hello from Python" msg.set_content("Sent via SMTP.") msg.add_alternative("<p>Sent via SMTP.</p>", subtype="html") with smtplib.SMTP("smtp.unitpost.com", 587) as smtp: smtp.starttls() smtp.login("unitpost", os.environ["UNITPOST_API_KEY"]) smtp.send_message(msg)
Flask
Configure Flask-Mail's SMTP settings for Unitpost and send from a verified domain.
Install Flask-Mail
Shellpip install Flask-MailConfigure and send
Pythonimport os from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) app.config.update( MAIL_SERVER="smtp.unitpost.com", MAIL_PORT=587, MAIL_USE_TLS=True, MAIL_USERNAME="unitpost", MAIL_PASSWORD=os.environ["UNITPOST_API_KEY"], MAIL_DEFAULT_SENDER="you@yourdomain.com", ) mail = Mail(app) def send_welcome(to: str) -> None: msg = Message("Welcome", recipients=[to], html="<p>Sent via SMTP.</p>") mail.send(msg)Verify delivery
Check Activity. Bare Python: smtplib.
FastAPI
Call Python's SMTP client from a FastAPI route. Same host, username, and API-key password as every other stack.
Send from a route
Pythonimport os import smtplib from email.message import EmailMessage from fastapi import FastAPI app = FastAPI() @app.post("/send") def send() -> dict[str, bool]: msg = EmailMessage() msg["From"] = "you@yourdomain.com" msg["To"] = "customer@example.com" msg["Subject"] = "Hello from FastAPI" msg.set_content("Sent via SMTP.") with smtplib.SMTP("smtp.unitpost.com", 587) as smtp: smtp.starttls() smtp.login("unitpost", os.environ["UNITPOST_API_KEY"]) smtp.send_message(msg) return {"ok": True}Verify delivery
Confirm in Activity.
Go
Go's net/smtp client can STARTTLS to Unitpost on port 587. Username is the literal `unitpost`; password is an API key.
Send with net/smtp
Gopackage main import ( "crypto/tls" "net/smtp" "os" ) func main() { host := "smtp.unitpost.com" auth := smtp.PlainAuth("", "unitpost", os.Getenv("UNITPOST_API_KEY"), host) to := []string{"customer@example.com"} msg := []byte("From: you@yourdomain.com\r\n" + "To: customer@example.com\r\n" + "Subject: Hello from Go\r\n" + "\r\n" + "Sent via SMTP.\r\n") c, err := smtp.Dial(host + ":587") if err != nil { panic(err) } defer c.Close() if err = c.StartTLS(&tls.Config{ServerName: host}); err != nil { panic(err) } if err = c.Auth(auth); err != nil { panic(err) } if err = c.Mail("you@yourdomain.com"); err != nil { panic(err) } if err = c.Rcpt(to[0]); err != nil { panic(err) } w, err := c.Data() if err != nil { panic(err) } if _, err = w.Write(msg); err != nil { panic(err) } if err = w.Close(); err != nil { panic(err) } _ = c.Quit() }Port 587 needs an explicit STARTTLS before AUTH (PLAIN and LOGIN are both accepted). From must be on a verified domain.
Verify delivery
The message appears in Activity.
Spring Boot
Set Spring Mail properties to Unitpost SMTP and send with JavaMailSender. Port 587, STARTTLS, username `unitpost`.
Set mail properties
Propertiesspring.mail.host=smtp.unitpost.com spring.mail.port=587 spring.mail.username=unitpost spring.mail.password=${UNITPOST_API_KEY} spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=trueSend with JavaMailSender
JavaMimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom("you@yourdomain.com"); helper.setTo("customer@example.com"); helper.setSubject("Hello from Spring"); helper.setText("<p>Sent via SMTP.</p>", true); mailSender.send(message);Verify delivery
Check Activity.
.NET
System.Net.Mail.SmtpClient is obsolete. Use MailKit, STARTTLS on 587, username `unitpost`, API key as password.
Add MailKit
Shelldotnet add package MailKitSend
C#using MailKit.Net.Smtp; using MailKit.Security; using MimeKit; var message = new MimeMessage(); message.From.Add(MailboxAddress.Parse("you@yourdomain.com")); message.To.Add(MailboxAddress.Parse("customer@example.com")); message.Subject = "Hello from .NET"; message.Body = new TextPart("html") { Text = "<p>Sent via SMTP.</p>" }; using var client = new SmtpClient(); await client.ConnectAsync("smtp.unitpost.com", 587, SecureSocketOptions.StartTls); await client.AuthenticateAsync("unitpost", Environment.GetEnvironmentVariable("UNITPOST_API_KEY")); await client.SendAsync(message); await client.DisconnectAsync(true);Verify delivery
Confirm in Activity.