Wysyłka email
Jedno API dla każdego emaila, który wysyłasz.
Transakcyjne czy marketingowe, jedna wiadomość czy sto, wysyłane przez to samo Email API, z wbudowaną idempotencją, listą wykluczeń i webhookami. Przekaż surowy HTML lub wyrenderuj swoje szablony React Email.
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..."
You can sign in any time at bird.com/login.
Your test API key is on your dashboard, ready to send.
Wyślij pierwszy email w pięć minut.
W języku, którego już używasz.
Wysyłanie to rdzeń Bird Email API. Pierwszą wiadomość możesz wysłać na adres sandbox (delivered@messagebird.dev), aby przetestować całą platformę (wysyłki, webhooki, supresję), zanim zweryfikujesz domenę.
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"Pięć rzeczy, których nie budujesz sam.
Ten sam kontrakt na każdym kanale Bird.
- 01
Transakcyjny i marketingowy.
Ten sam endpoint wysyła reset hasła i kampanię. Pole kategorii decyduje, jak stosowane są wykluczenia i wypisy z subskrypcji.
- 02
Szablony po swojemu.
Przekaż surowy HTML, wyrenderuj szablony React Email do HTML w swojej aplikacji i wyślij wynik, albo wskaż zapisany szablon, a my go wyrenderujemy za Ciebie. Twój toolchain — bez zmian.
- 03
Wysyłka wsadowa do 100.
Do 100 niezależnych wiadomości na wywołanie, każda z własnym odbiorcą i zmiennymi, walidowanych jako jedna całość, więc nigdy nie wysyłasz połowicznie.
- 04
Idempotentny z kontraktu.
Każda wysyłka przyjmuje klucz idempotencji, więc ponowione żądanie po przekroczeniu limitu czasu zwraca pierwotny wynik zamiast wysyłać podwójnie.
- 05
Webhook przy każdej zmianie stanu.
Przyjęto, dostarczono, otwarto, kliknięto, odbicie, skarga. Każde zdarzenie podpisane HMAC, zabezpieczone przed powtórzeniem, idempotentne, ta sama koperta na każdym kanale.
Już wysyłasz gdzie indziej? Przejdź w jedno popołudnie.
Wywołanie, które już wykonujesz, ledwo się zmienia: podmień klienta, zachowaj szablony, skieruj webhooki na jeden endpoint. Przewodniki migracji obejmują SendGrid, Amazon SES, Mailgun i Resend.
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>",
});
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>",
});
Jedna wiadomość czy sto, jedno wywołanie.
Złącz wsadowo do 100 niezależnych wiadomości w jednym żądaniu, każda z własnym odbiorcą i zmiennymi. Wsad jest walidowany jako całość: jedna błędna wiadomość odrzuca wywołanie z kodem 422, więc nigdy nie wyślesz połowicznie. Pojedynczy klucz idempotencji sprawia, że całe żądanie można bezpiecznie ponowić.
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, { idempotencyKey: `digest-${runId}` })
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);
Dołącz własny kontekst do każdej wysyłki.
Tagi to pełnoprawny, filtrowalny wymiar: dziel dostarczalność i zaangażowanie według kampanii, szablonu lub eksperymentu w stats API (do 20 na wiadomość). Metadane to dowolny JSON, do 2 KB, który wraca nietknięty przy każdym odczycie i webhooku, więc Twoje własne identyfikatory podróżują razem z wiadomością.
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" },
});
Obserwuj każdą wiadomość przez całe jej życie.
Wysyłka zwraca natychmiast 202; wynik przychodzi jako webhook dla każdego odbiorcy. Zweryfikuj jeden podpis, rozgałęź według typu: ta sama koperta, którą już obsługujesz dla SMS, voice i WhatsApp.
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 });
}
Twarde odbicia, skargi i wypisy z subskrypcji również automatycznie aktualizują Twoją listę wykluczeń, więc błędny adres nigdy nie kosztuje Cię reputacji dwukrotnie.
email.acceptedWysyłka została zaakceptowana i jest przygotowywana do dostarczenia.email.processedW kolejce do serwera pocztowego odbiorcy.email.deliveredSerwer pocztowy odbiorcy zaakceptował wiadomość.email.deferredTymczasowo odrzucona — ponowimy próbę.email.bouncedTrwałe niepowodzenie: typ odrzucenia i kod SMTP w ładunku.email.openedOdbiorca otworzył wiadomość. Może wystąpić więcej niż raz.email.clickedOdbiorca kliknął śledzony link.email.complainedOdbiorca zgłosił wiadomość jako spam.email.unsubscribedOdbiorca zrezygnował z subskrypcji przez śledzony link rezygnacji.
Przetestuj każdy wynik, zanim wejdziesz na żywo.
W sandboxie to adres odbiorcy decyduje o wyniku, nie stan Twojego konta. Wyślij na delivered@messagebird.dev, aby uzyskać poprawne dostarczenie, lub na bounce@, softbounce@, deferred@, complaint@ i suppressed@, aby przetestować każdą ścieżkę błędu przez prawdziwy pipeline i prawdziwe webhooki. Bez domeny do weryfikacji, bez ryzyka dla Twojej reputacji. Produkcja jest celowo ograniczona: najpierw weryfikujesz domenę, a nowa domena lub dedykowane IP przechodzi przez rozgrzewkę, zanim zacznie obsługiwać pełny wolumen.
Zgłęb temat w dokumentacji.
Przeczytaj przewodnik po wysyłce, podłącz zdarzenia e-mail i webhooki, a jeśli przechodzisz od innego dostawcy, skorzystaj z przewodnika migracji z SendGrid, SES, Mailgun lub Resend.
Reszta platformy Email
Jedno API, jeden zestaw kluczy. Poznaj pozostałe funkcje.
Około 40% komercyjnej poczty e-mail na świecie już działa na Bird.
E-maile transakcyjne i marketingowe na infrastrukturze, którą prowadzimy od dekady. Wysyłka to jedna z możliwości Bird Email API: dostarczalność, dedykowane adresy IP, lista wykluczeń i analityka są w komplecie.