Skip to content
Draft. Customer sending is not open yet; details on this page may change before launch.

First send via SMTP

  • A project with a connected domain and an approved sender address.
  • An SMTP credential for that project: a username and a password shown once. SMTP credentials only send; they can’t call the API.
  • The SMTP host name shown on the project’s SMTP page.
Setting Value
Host shown in your dashboard
Port 587 with STARTTLS, or 465 with implicit TLS
Encryption required, TLS 1.2 or newer; keep certificate verification on
Authentication PLAIN or LOGIN, only after TLS
From must exactly match your approved sender address
import nodemailer from 'nodemailer';
const transport = nodemailer.createTransport({
host: process.env.WENEED_SMTP_HOST,
port: 587,
secure: false, // STARTTLS is negotiated on 587; use 465 with secure: true for implicit TLS
requireTLS: true,
auth: { user: process.env.WENEED_SMTP_USER, pass: process.env.WENEED_SMTP_PASS },
});
await transport.sendMail({
from: 'Your App <hello@yourdomain.com>',
to: 'person@example.com',
subject: 'Welcome',
text: 'Thanks for signing up.',
headers: { 'X-Email-Idempotency-Key': 'signup-7f3c2a91-welcome' },
});

A 250 reply means the message is stored and queued, not delivered.

Ordinary mail clients retry on their own. If the connection drops after you sent the message but before the 250 arrived, a retry can create a second message. Add the X-Email-Idempotency-Key header (16 to 128 printable characters) so a retry of the same message is recognised. See Retries and duplicates.

One recipient per message, no attachments, and no sent folder or inbox. Full limits are in the SMTP reference.