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
| Setting | Value |
|---|---|
| Host | smtp.padimail.app |
| Port | 587 with STARTTLS (required), or 465 with TLS |
| Username | padimail |
| Password | An API key: full access or sending only |
| Limits | 50 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.
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:
| Header | Does |
|---|---|
X-PM-Tags: category=receipt, plan=pro | Sets tags |
X-PM-Stream: marketing | Sets the stream |
X-PM-Scheduled-At: 2026-10-28T09:00:00+01:00 | Schedules the email |
X-PM-Quota-Behavior: reject | Rejects instead of waiting when a limit is reached |
X-PM-Fallback: false | Keeps this message off Gmail fallback (Free plan) |
Replies you might see
| Code | Means |
|---|---|
250 | Accepted. Over a limit, the reply says the email is waiting and when it will send |
535 | The username or API key is wrong |
550 | The sender isn't allowed, or this recipient is suppressed (other recipients still go) |
452 | Over a limit with X-PM-Quota-Behavior: reject, or too many emails already waiting |
451 | A temporary problem on our side. Your library will retry |
Was this page helpful?