Airmail / Developer guides
Nodemailer SMTP with Airmail
Use a familiar Node.js mailer while keeping durable acceptance, domain checks and tenant limits.
Free Developer beta. Verified domain and manual sending approval required.
SMTP settings
Use smtp.airmailai.tech, port 587, STARTTLS required, and the username/password created in your workspace SMTP settings. These are not your dashboard login or REST API key. Keep certificate verification enabled. Do not choose implicit TLS on port 587. SMTP is submission only: it is not an IMAP/POP mailbox. Set a verified From address and monitored Reply-To. Preserve Message-ID and identical MIME content when retrying an uncertain SMTP transaction.
Host: smtp.airmailai.tech
Port: 587
Encryption: STARTTLS (required)
Username: your Airmail SMTP username
Password: your one-time SMTP passwordNode.js with Nodemailer
Install nodemailer in a supported Node.js application and save this as send.mjs. Set the four credential/address environment values below and a stable AIRMAIL_MESSAGE_ID such as <account-481-update@example.com>. Replace example.com with your verified domain. Run node send.mjs only for an intended recipient after approval. secure:false selects STARTTLS negotiation, not permission to authenticate without encryption; requireTLS:true makes the upgrade mandatory.
import nodemailer from "nodemailer";
const transport = nodemailer.createTransport({
host: "smtp.airmailai.tech", port: 587,
secure: false, requireTLS: true,
auth: { user: process.env.AIRMAIL_SMTP_USERNAME,
pass: process.env.AIRMAIL_SMTP_PASSWORD },
connectionTimeout: 15000, socketTimeout: 30000
});
const result = await transport.sendMail({
from: process.env.AIRMAIL_FROM,
to: process.env.AIRMAIL_TEST_RECIPIENT,
messageId: process.env.AIRMAIL_MESSAGE_ID,
subject: "Your requested account update",
text: "Your account update is ready."
});
console.log(result.response);Troubleshoot before retrying
Authentication failure: confirm an active SMTP credential, not an API key, and verify TLS negotiated. Sender rejection: verify the actual From domain in the same workspace. Temporary capacity rejection: retry according to the SMTP code without regenerating message identity. A successful submission response does not prove inbox placement; use the message lifecycle to investigate downstream delivery.
Before your first production message
Start with the free Developer beta. Verify your account, create a workspace and add a domain you control: example.com and mail.example.com are both supported. Publish the records shown in Domains. Merge an existing SPF policy rather than adding another; preserve a valid existing DMARC policy. Create an API key after verification, use the dashboard for one owner-controlled validation, and request production approval. SMTP credentials become available after activation. No repository or SSH access is needed.
Know the boundaries
Airmail is a controlled public beta. Production sending requires manual approval. Paid plans remain request-access for general signups; payment never grants sending approval. Monthly allowance, daily safety quota and provider pacing are different limits. Sending is transactional by default; partnership/campaign access needs separate approval and is not a purchased-list service. Dedicated reputation isolation is not currently included. There is no inbox-placement guarantee or published OTP delivery SLA.