SMTP relay
For frameworks and legacy apps that only speak SMTP. Every message you relay becomes a normal API send under the hood — same logs, same suppressions, same quotas, same deliverability autopilot. Your password is an API key, so nothing new to provision.
Connection settings
| Host | smtp.noticeapi.com |
| Port | 465 (implicit TLS — not STARTTLS) |
| Username | Anything — it is ignored |
| Password | An API key (ntc_xxxxxxxxxxxxxxxxxxxx) |
node (nodemailer)
import nodemailer from "nodemailer";
const transport = nodemailer.createTransport({
host: "smtp.noticeapi.com",
port: 465,
secure: true, // implicit TLS
auth: {
user: "noticeapi", // ignored — anything works
pass: "ntc_xxxxxxxxxxxxxxxxxxxx",
},
});
await transport.sendMail({
from: "Acme <[email protected]>",
to: "[email protected]",
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
});rails
# config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.noticeapi.com",
port: 465,
tls: true, # implicit TLS, not STARTTLS
user_name: "noticeapi",
password: ENV["NOTICEAPI_KEY"], # ntc_...
}django
# settings.py EMAIL_HOST = "smtp.noticeapi.com" EMAIL_PORT = 465 EMAIL_USE_SSL = True # implicit TLS EMAIL_HOST_USER = "noticeapi" EMAIL_HOST_PASSWORD = os.environ["NOTICEAPI_KEY"] # ntc_...
Rules worth knowing
The From domain must be one of your verified sending domains, exactly like the API. Relayed mail is treated as transactional — use broadcasts for marketing so unsubscribe handling stays correct. Attachments inside the MIME body are dropped in v0 (use the REST API for those), messages cap at 10 recipients and ~2 MB, and only the first text/html and text/plain parts are kept.