Skip to content
All docs pages

SMTP

Anything that can send email over SMTP can send through Herald without code changes: point its settings at Herald and use an API key as the password.

Hostsmtp.heraldmail.dev
Port465 (TLS from the start) or 587 (STARTTLS, required)
Usernameherald
Passwordan API key with the send scope
Limits50 recipients and 40 MB a message

Herald only accepts authentication over TLS, so an app can’t send its key in the clear by mistake.

As a URL

Many apps take one setting:

.env
SMTP_URL=smtps://herald:hrld_live_…@smtp.heraldmail.dev:465

Nodemailer

TypeScript
import nodemailer from 'nodemailer'

const transport = nodemailer.createTransport({
  host: 'smtp.heraldmail.dev',
  port: 465,
  secure: true,
  auth: { user: 'herald', pass: process.env.HERALD_API_KEY },
})

await transport.sendMail({
  from: 'Hallelo <hello@hallelo.church>',
  to: 'ada@example.com',
  subject: 'This Sunday',
  text: 'Doors open at 10.',
})

Herald’s own headers

Herald reads these, then removes them before the message goes on:

Header
X-Herald-Streamtransactional (the default) or marketing: a Proclamation, with one-click unsubscribe
X-Herald-Tagsname=value pairs, separated by commas, for the log and webhooks

Everything else is handled as it is for the API: the same checks on the sender’s domain, the same quota and suppressions, and the same log and webhooks. A message Herald refuses is refused in the SMTP conversation, with the reason.