Keep your message builder.
Continue creating HTML, text, and attachments with the application or library your team already uses.
Keep your application’s email builder. Connect it to Bird for authenticated sending and delivery visibility, with the wider email platform ready when you need it.
MAIL TRANSPORT SMTPACCOUNT REGION Europe · eu1HOST eu1.smtp.bird.comPORT 465SECURITY TLSCREDENTIALS Server-side secret Keep your existing MIME email builder.
Thanks, Alex. Your order is confirmed.

MAIL TRANSPORT SMTPACCOUNT REGION Europe · eu1HOST eu1.smtp.bird.comPORT 465SECURITY TLSCREDENTIALS Server-side secret Keep your existing MIME email builder.
em_example_fn1042 SMTP submission AcceptedRecipient event email.delivered Receiving server accepted the message.Inbox placement is a separate question.
Thanks, Alex. Your order is confirmed.

Companies that trust Bird across their communications.
Read Bird customer storiesYour application already knows how to build its email. Bring that work to Bird with a familiar SMTP connection and a wider platform around every send.
Continue creating HTML, text, and attachments with the application or library your team already uses.
Configure the regional SMTP host, transport, and credentials for authenticated sending.
Use the queued email ID to connect submission to logs, delivery events, and the customer workflow.
Nodemailer with Bird’s documented TLS settings. Install nodemailer, use a key with the emails scope and a verified sender. Reuse the logical message key only for retries of that message.
Open the implementation guide →Connect an application you already use.
npm install nodemailerimport nodemailer from "nodemailer";
const transport = nodemailer.createTransport({
host: "eu1.smtp.bird.com", // Match the key region.
port: 465,
secure: true,
auth: { user: "bird", pass: process.env.BIRD_API_KEY }
});
const result = await transport.sendMail({
from: process.env.BIRD_VERIFIED_FROM,
to: "delivered@messagebird.dev",
subject: "Your studio visit",
text: "Your booking FN–1042 is confirmed.",
headers: { "X-Bird-Idempotency-Key": "booking-FN1042-confirmed-v1" }
});
console.log(result.response); // Keep the queued email ID.
Trace a successful submission, a region mismatch, or an unverified sender. SMTP acceptance and the later delivery event answer different questions.
Port 465 starts inside TLS. Ports 587 and 2525 require STARTTLS before authentication. Keep credentials on your server.
export BIRD_SMTP_HOST=eu1.smtp.bird.com export BIRD_SMTP_PORT=465 export BIRD_SMTP_TLS_MODE=implicit export BIRD_SMTP_USER=bird export BIRD_API_KEY="REPLACE_ON_SERVER"
import nodemailer from "nodemailer";
const port = Number(process.env.BIRD_SMTP_PORT);
const implicit = process.env.BIRD_SMTP_TLS_MODE === "implicit";
if (![465, 587, 2525].includes(port) || implicit !== (port === 465)) {
throw new Error("TLS mode/port mismatch");
}
const transport = nodemailer.createTransport({
host: process.env.BIRD_SMTP_HOST, port,
secure: implicit, requireTLS: !implicit,
auth: { user: "bird", pass: process.env.BIRD_API_KEY }
});import os, smtplib, ssl
host = os.environ["BIRD_SMTP_HOST"]
port = int(os.environ["BIRD_SMTP_PORT"])
implicit = os.environ["BIRD_SMTP_TLS_MODE"] == "implicit"
if port not in (465, 587, 2525) or implicit != (port == 465):
raise ValueError("TLS mode/port mismatch")
context = ssl.create_default_context()
client = (smtplib.SMTP_SSL(host, port, context=context)
if implicit else smtplib.SMTP(host, port))
try:
if not implicit:
client.ehlo()
client.starttls(context=context)
client.ehlo()
client.login("bird", os.environ["BIRD_API_KEY"])
# Submit your existing MIME message here.
finally:
client.quit()These connection excerpts prepare the transport. Use the complete example above to submit a message. Unconfigured SMTP keys use the transactional category; the HTTP API has its own defaults.
Use an API key with emails scope, in the same region as the relay.
Keep the returned email ID with the application event. Preserve the logical idempotency key for an uncertain retry within its supported window.
Follow recipient events separately. Receiving-server acceptance does not establish inbox placement.
Illustrative connection outcome
Settings are ready. Trace this connection to inspect an outcome; changing a setting clears the previous result.
Example: 250 queued as em_example_fn1042. The relay accepted the message. A later email.delivered event records receiving-server acceptance; inbox placement remains unknown.
Example: 535 authentication refused. Use the host named for the API key’s region, then retry authentication. No message was queued in this example.
Encryption is required. On 587 or 2525, complete STARTTLS before AUTH. On 465, establish TLS before the SMTP dialogue. This example stops before authentication and queues nothing.
Example: 550 sender domain is not verified. Verify the From and envelope-sender domain in this workspace before resubmitting. Retrying unchanged does not resolve a permanent refusal.
SMTP and HTTP submissions share domain verification, IP pools, signing, suppressions, tracking, events, and analytics. A successful submission still precedes recipient delivery.
Read the product guide ↗Documented behavior; confirm current access and setup in your workspace.Keep the email-building code and move host, transport, and credentials together. Test a controlled workload before migration.
Configure SMTP ↗Use the API when a direct application request is the better fit. Both paths sit inside the wider Bird email platform.
Explore API sending ↗Keep SMTP where it works for your application. Add API sending, campaigns, and delivery insights as your email program grows.
Everyday cup · Natural glazeAn existing application submits Alex’s receipt.
Follow the queued message into its delivery outcome.
Your application can continue the customer relationship in a conversation.
Test message parity, reconcile uncertain submissions and keep a rollback route.
Read the field guide →Scope your SMTP volume in an Email plan. Keep sender authentication, recipient restrictions, and reporting connected to the same program.
Compare Email plans ↗Match monthly sending volume to the workflow you need.
测试 API 密钥即刻可用。添加支付方式并验证发送者身份后,即可解锁生产环境。
阅读文档