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.

Hostsmtp.unitpost.com
Usernameunitpost(always this literal value)
PasswordYour Unitpost API key(must carry emails:send)
Port (STARTTLS)587(or 2587 if blocked)
Port (implicit TLS)465(or 2465 if blocked)
From addressAny 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Install Nodemailer

    Add it to your Node.js project (Node 18+). The package is actively maintained.

    Shell
    npm install nodemailer
  2. Create a transport

    Point createTransport at smtp.unitpost.com. Use port 587 with secure: false for STARTTLS, or port 465 with secure: true for implicit TLS. The username is always unitpost; the password is your API key with emails:send.

    JavaScript
    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,
      },
    });

    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.

  3. Send an email

    The from address must be on a domain you've verified in Unitpost. This is the same sendMail call in a Next.js Route Handler or a NestJS provider.

    JavaScript
    await transporter.sendMail({
      from: "you@yourdomain.com",
      to: "customer@example.com",
      subject: "Hello from Unitpost",
      html: "<h1>Welcome!</h1><p>Sent via SMTP.</p>",
    });
  4. Verify it in the dashboard

    Open Activity in your Unitpost dashboard — the message appears alongside API sends, with delivery, open, and click status. Framework-specific walkthroughs: Next.js, NestJS, Express.

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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Open Supabase SMTP settings

    In the Supabase dashboard go to Project Settings → Authentication → SMTP Settings and enable Custom SMTP.

  2. Enter your Unitpost credentials

    Hostsmtp.unitpost.com
    Port587
    Usernameunitpost
    PasswordYour Unitpost API key
    Sender emailauth@yourdomain.com (verified)
    Sender nameYour app name

    The sender email must be on a domain you've verified in Unitpost, or sends are rejected with a 550.

  3. 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.

  4. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Install an SMTP plugin

    From Plugins → Add New, install and activate WP Mail SMTP (or a comparable SMTP plugin).

  2. Choose the "Other SMTP" mailer

    In the plugin settings, pick the generic Other SMTP option (not a named provider).

  3. Enter your Unitpost SMTP settings

    SMTP Hostsmtp.unitpost.com
    EncryptionTLS (STARTTLS)
    SMTP Port587
    AuthenticationOn
    SMTP Usernameunitpost
    SMTP PasswordYour Unitpost API key
    From Emailyou@yourdomain.com (verified)

    Store the API key in the plugin's password field. Set the From Email to an address on your verified domain.

  4. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Open the email provider settings

    In the Auth0 dashboard go to Branding → Email Provider (or Emails → Provider on older tenants) and choose SMTP.

  2. Enter your Unitpost credentials

    Fromyou@yourdomain.com (verified)
    Hostsmtp.unitpost.com
    Port587
    Usernameunitpost
    PasswordYour Unitpost API key
  3. Save and send a test

    Save the provider, then use Auth0's Send Test Email button to verify the connection.

  4. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Configure Action Mailer

    In your environment config (e.g. config/environments/production.rb), set the delivery method and SMTP settings.

    Ruby
    config.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,
    }
  2. Set your sender

    Use a from address on a verified domain in your mailer.

    Ruby
    class UserMailer < ApplicationMailer
      default from: "you@yourdomain.com"
    
      def welcome_email
        mail(to: "customer@example.com", subject: "Welcome!")
      end
    end
  3. Deliver 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Set your mail environment variables

    Add the following to your .env file.

    Shell
    MAIL_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.

  2. Clear the config cache

    If you cache config in production, refresh it so the new values load.

    Shell
    php artisan config:clear
  3. Send 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Configure your settings

    Add the SMTP settings to settings.py. Keep the API key in an environment variable.

    Python
    EMAIL_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"
  2. Send an email

    Use send_mail or an EmailMessage. The from address must be on a verified domain.

    Python
    from 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>",
    )
  3. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Install PHPMailer

    Add it via Composer.

    Shell
    composer require phpmailer/phpmailer
  2. Configure 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();
  3. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Install Nodemailer

    Shell
    npm install nodemailer
    npm install -D @types/nodemailer
  2. Create a Route Handler

    Server-only. The from address must be on a verified domain.

    TypeScript
    import 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 });
    }
  3. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Install Nodemailer

    Shell
    npm install nodemailer
    npm install -D @types/nodemailer
  2. Provide a transporter

    TypeScript
    import { 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>",
        });
      }
    }
  3. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Install Nodemailer

    Shell
    npm install nodemailer
  2. Send from a route

    JavaScript
    import 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 });
    });
  3. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Send with smtplib

    Python
    import 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)
  2. Framework wrappers

    Using a framework? Django, Flask, FastAPI.

Flask

Configure Flask-Mail's SMTP settings for Unitpost and send from a verified domain.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Install Flask-Mail

    Shell
    pip install Flask-Mail
  2. Configure and send

    Python
    import 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)
  3. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Send from a route

    Python
    import 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}
  2. 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.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Send with net/smtp

    Go
    package 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.

  2. 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`.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Set mail properties

    Properties
    spring.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=true
  2. Send with JavaMailSender

    Java
    MimeMessage 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);
  3. Verify delivery

    Check Activity.

.NET

System.Net.Mail.SmtpClient is obsolete. Use MailKit, STARTTLS on 587, username `unitpost`, API key as password.

Need an API key?

SMTP password is a Unitpost API key with emails:send. Username is always unitpost.

  • 5,000 emails/month
  • 3 API keys
  • 5 sending domains
Get free SMTP key
  1. Add MailKit

    Shell
    dotnet add package MailKit
  2. Send

    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);
  3. Verify delivery

    Confirm in Activity.

Search docs and guides

Search the docs and product guides.