PadiMail Docs
Get started

SMTP quickstart

Send through the SMTP relay from Nodemailer, Laravel, Django or any mail library, with only a host and password change.

NeedsAny accountTest keys work as SMTP passwords too. Live sending follows the same tiers as the API.

The relay applies exactly the same rules, limits and logging as the API. Every message you send shows up under Emails in the dashboard.

Settings

SettingValue
Hostsmtp.padimail.app
Port587 with STARTTLS (required), or 465 with TLS
Usernamepadimail
PasswordAn API key: full access or sending only
Limits50 recipients a message, 40 MB, 10 connections per key

If you're coming from Resend's SMTP, the username resend also works: change only the host and the password.

send-smtp.mjs
import nodemailer from "nodemailer";

const transport = nodemailer.createTransport({
  host: "smtp.padimail.app",
  port: 587,
  secure: false, // STARTTLS is negotiated and required
  auth: { user: "padimail", pass: process.env.PADIMAIL_API_KEY },
});

const info = await transport.sendMail({
  from: "Acme Store <onboarding@sandbox.padimail.app>",
  to: "delivered@test.padimail.app",
  subject: "Hello over SMTP",
  html: "<p>It works.</p>",
  headers: { "X-PM-Tags": "category=welcome" },
});

console.log(info.response); // 250 2.0.0 Ok: queued as em_01JB…

The reply to each message carries its email ID (250 2.0.0 Ok: queued as em_…), which you can look up with the API:

curl https://api.padimail.app/v1/emails/em_01JB... -H "Authorization: Bearer $PADIMAIL_API_KEY"

Extra headers

Add these to a message to use features the API has:

HeaderDoes
X-PM-Tags: category=receipt, plan=proSets tags
X-PM-Stream: marketingSets the stream
X-PM-Scheduled-At: 2026-10-28T09:00:00+01:00Schedules the email
X-PM-Quota-Behavior: rejectRejects instead of waiting when a limit is reached
X-PM-Fallback: falseKeeps this message off Gmail fallback (Free plan)

Replies you might see

CodeMeans
250Accepted. Over a limit, the reply says the email is waiting and when it will send
535The username or API key is wrong
550The sender isn't allowed, or this recipient is suppressed (other recipients still go)
452Over a limit with X-PM-Quota-Behavior: reject, or too many emails already waiting
451A temporary problem on our side. Your library will retry
Was this page helpful?

On this page