一个 API 满足所有
邮件发送需求。

无论事务邮件还是营销邮件,一条消息还是一百条,都通过同一个 Email API 发送,内置幂等性、地址抑制和 webhook。支持传入原始 HTML 或渲染你的 React Email 模板。

welcome.tsx
200 · 1.2s
import { BirdClient } from "@messagebird/sdk";
import { render } from "@react-email/render";
import { WelcomeEmail } from "./emails/welcome";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

const { data, error } = await bird.email.send({
  from:    "Bird <hello@bird.com>",
  to:      ["ada@example.com"],
  subject: "Your invite is ready",
  html:    await render(<WelcomeEmail name="Ada" />),
}).safe();

if (error) throw error;
console.log(data.id);
// → "em_2bX91Yk8h..."

已经在通过 SMTP 发送邮件?

保留您现有的 SMTP 客户端,将其连接到 Bird 的中继服务器。使用 SMTP 设置页面获取区域主机、TLS 端口和身份验证信息。如果您的应用需要接收和解析邮件,请从入站邮件开始。

五分钟内发出你的第一封邮件。

用你已经在用的编程语言。

发送是 Bird Email API 的核心。你的第一次发送可以发到沙盒地址(delivered@messagebird.dev),这样你就能在验证域名之前体验完整平台功能(发送、webhook、地址抑制)。

1
2
3
4
5
6
7
const msg = await bird.email.send({
  from: { email: "onboarding@messagebird.dev", name: "Bird" },
  to: ["delivered@messagebird.dev"],
  subject: "Hello from Bird",
  html: "<p>My first Bird email.</p>",
});
console.log(msg.id, msg.status); // "em_…", "accepted"

五项能力,无需自行构建。

每个 Bird 通道使用相同的接口规范。

  1. 01

    事务邮件 + 营销邮件。

    同一个接口既能发送密码重置邮件,也能发送营销活动邮件。一个类别字段决定地址抑制和退订规则如何生效。

  2. 02

    模板随你选择。

    传入原始 HTML,在你的应用中将 React Email 模板渲染为 HTML 后发送结果,或指定一个已存储的模板由服务端渲染。你的工具链无需改变。

  3. 03

    批量发送最多 100 条。

    每次调用最多 100 条独立消息,每条有各自的收件人和变量,整批作为一个单元验证,确保不会出现部分发送。

  4. 04

    接口级幂等保障。

    每次发送都接受一个幂等键,超时后重试请求会返回原始结果,而不会重复发送。

  5. 05

    每次状态变更都有 webhook。

    已接收、已投递、已打开、已点击、已退回、已投诉。每个事件都经过 HMAC 签名,防重放、幂等,所有通道使用相同的消息结构。

从您的应用发出第一个请求。

创建账户并生成 API 密钥,然后按照发送指南使用测试收件人完成发送。

开始使用

已经在用其他服务发送邮件?一个下午即可完成迁移。

你现有的调用几乎不用改动:替换客户端,保留模板,将 webhook 指向一个接口。迁移指南涵盖 SendGrid、Amazon SES、Mailgun 和 Resend。

sendgrid.ts
SendGrid
import sgMail from "@sendgrid/mail";

sgMail.setApiKey(process.env.SENDGRID_API_KEY!);

await sgMail.send({
  from:    "hello@yourdomain.com",
  to:      "delivered@messagebird.dev",
  subject: "Your invite is ready",
  html:    "<p>Welcome aboard, Ada.</p>",
});
bird.ts
Bird
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

await bird.email.send({
  from:    "hello@yourdomain.com",
  to:      ["delivered@messagebird.dev"],
  subject: "Your invite is ready",
  html:    "<p>Welcome aboard, Ada.</p>",
});

一条消息或一百条,一次调用。

在一次请求中批量发送最多 100 条独立消息,每条有各自的收件人和变量。整批作为一个单元验证:一条无效消息会导致整个调用返回 422,确保不会部分发送。一个幂等键即可保障整个请求安全重试。

digest.ts
202 · batch
import { BirdClient } from "@messagebird/sdk";
import { render } from "@react-email/render";
import { Digest } from "./emails/digest";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const messages = await Promise.all(
  users.map(async (u) => ({
    from:    "Acme <hello@yourdomain.com>",
    to:      [u.email],
    subject: "Your weekly digest",
    html:    await render(<Digest user={u} />),
  })),
);

const { data: batch, error } = await bird.email
  .sendBatch(messages)
  .safe();

if (error) throw error;
console.log(`queued ${batch.data.length} messages`);

为每次发送附加你自己的上下文。

标签是一等的、可过滤的维度:在统计 API 中按活动、模板或实验切分投递和互动数据(每条消息最多 20 个标签)。元数据是任意 JSON 数据,最大 2 KB,在每次读取和 webhook 中原样返回,让你自己的 ID 随消息一起传递。

tagged.ts
await bird.email.send({
  from:     "Acme <hello@yourdomain.com>",
  to:       ["delivered@messagebird.dev"],
  subject:  "Your invite is ready",
  html:     "<p>Welcome aboard, Ada.</p>",
  tags:     [{ name: "campaign", value: "spring-2026" }],
  metadata: { user_id: "u_2bX91", order_id: "ord_5512" },
});

追踪每条消息的完整生命周期。

发送立即返回 202;结果以每个收件人一个 webhook 的形式送达。验证一个签名,按类型分发:与你处理 SMS、语音和 WhatsApp 时使用的消息结构完全相同。

app/api/webhooks/bird/route.ts
signed
import { bird } from "@/lib/bird";

export async function POST(req: Request) {
  const event = bird.webhooks.unwrap(
    await req.text(),
    Object.fromEntries(req.headers),
  );

  switch (event.type) {
    case "email.delivered":
      await markDelivered(event.data.email_id);
      break;
    case "email.bounced":
      await flag(event.data.recipient, event.data.bounce_type);
      break;
  }

  return new Response(null, { status: 204 });
}

硬退回和投诉会更新收件人抑制列表。退订会记录用户的拒收偏好。后续发送时会检查这些记录。

  • email.accepted发送已被接收,正在准备投递。
  • email.processed已排队等待收件人邮件服务器处理。
  • email.delivered收件人邮件服务器已接受该消息。
  • email.deferred暂时被拒绝,我们将自动重试。
  • email.bounced永久失败:载荷中包含退回类型和 SMTP 状态码。
  • email.opened收件人打开了消息。可能触发多次。
  • email.clicked收件人点击了一个跟踪链接。
  • email.complained收件人将消息举报为垃圾邮件。
  • email.unsubscribed收件人通过跟踪的退订链接选择了退出。

上线前测试每种结果。

在沙盒中,收件人地址决定结果,无需依赖你的账户状态。发送到 delivered@messagebird.dev 可获得正常投递结果,或发送到 bounce@、softbounce@、deferred@、complaint@ 和 suppressed@ 以驱动每种失败路径通过真实的管道和真实的 webhook。无需验证域名,不影响你的发信声誉。生产环境有意设置了门槛:你需要先验证域名,新域名或独立 IP 需要通过预热流程才能承载全部流量。

在文档中深入了解。

阅读发送指南,接入邮件事件和 Webhooks,或者如果你正在从其他服务商迁移,请参考从 SendGrid、SES、Mailgun 或 Resend 的迁移指南

测试发送相关的行为。

一次成功的发送调用是集成的起点。演练退回和投诉处理,处理重复的 webhook 投递,并决定您的应用如何调度消息或接收回复。

161%

Zillow 客户故事中报告的邮件打开率提升。

阅读 Zillow 的故事

基于 Bird 构建

当合适的房源出现时,邮件必须即时送达。

Zillow 将时效性房源提醒迁移到 Bird,获得了应对发送高峰的能力和洞察互动效果的分析工具。其团队报告首月邮件打开率提升了 161%。

正在计划迁移或提升发送量?

联系销售

关于邮件发送的常见问题

可以同时发送事务性邮件和营销邮件吗?
可以,两者通过同一个发送 API 提交。唯一的区别是 category 字段,它决定了退订和取消订阅的适用规则。密码重置和收据选择 transactional,营销活动选择 marketing。
如果请求超时并重试会怎样?
每次逻辑发送时附带一个 Idempotency-Key 请求头。如果第一次请求已成功但您未收到响应,使用相同的密钥重放请求会返回原始结果并附带 Idempotency-Replay 头,而不会重复发送邮件。
可以定时发送邮件吗?
将 scheduled_at 设置为 30 秒到 30 天后的任意时间。发送请求会立即返回已接受状态,邮件保持计划状态直到发出,因此您可以在发送前随时取消。
可以添加附件吗?
可以,以 base64 编码放入 attachments 数组中。要在正文中内联显示图片,为其设置 content_id 并在 HTML 中通过 cid: 引用。原始文件大小请控制在 15 MB 以下,以确保编码后的邮件不超过 20 MB 上限,请注意可执行文件和脚本内容类型会在发送前被拒绝。

联系我们的邮件团队

构建你的下一个邮件集成。

与我们讨论事务性邮件、批量发送和投递事件。我们将帮助你规划集成方案、发送量和迁移计划。

创建账户,然后创建 API 密钥并发送一条测试消息。

您的信息

感兴趣的产品

选填

隐私政策

规模扩展
不失控。

在工作区中组织团队,控制 API 访问权限,通过审计日志追踪变更。

BirdHarborOrganization
WorkspacesProductionSandbox

Delivery agent

API key · Customer operations team
Active
PermissionsAccess
EmailRead & write
SMSRead & write
ALAlex Lee AdminPermissions updated

Audit log

Production
Workspace
Production
Resource
Delivery agent
WhatsApp
ReadRead & write
Succeeded

从 Email 开始。
使用 Bird 跨渠道构建。

你的下一个创意。
随时连接。