Jedno API do każdego
wysłanego e-maila.
Transakcyjne czy marketingowe, jedna wiadomość czy sto — wysyłane przez to samo Email API, z wbudowaną idempotencją, listą blokad i webhookami. Przekaż surowy HTML lub wyrenderuj 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.
Wysyłasz już przez SMTP?
Zachowaj istniejącego klienta SMTP i połącz go z przekaźnikiem Bird. Na stronie konfiguracji SMTP znajdziesz regionalne hosty, porty TLS i uwierzytelnianie. Jeśli Twoja aplikacja musi odbierać i przetwarzać wiadomości, zacznij od poczty przychodzącej.
Wyślij pierwszego e-maila w pięć minut.
Z języka, którego już używasz.
Wysyłanie to rdzeń Bird Email API. Pierwszą wiadomość możesz wysłać na adres sandbox (delivered@messagebird.dev), dzięki czemu przetestujesz całą platformę (wysyłanie, webhooki, listy blokad), 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 musisz budować sam.
Ten sam kontrakt na każdym kanale Bird.
- 01
Transakcyjne + marketingowe.
Ten sam endpoint wysyła reset hasła albo kampanię. Pole kategorii decyduje, jak działają listy blokad i rezygnacje z subskrypcji.
- 02
Szablony po twojemu.
Przekaż surowy HTML, wyrenderuj szablony React Email do HTML w swojej aplikacji i wyślij wynik, albo podaj nazwę zapisanego szablonu, a zostanie wyrenderowany za ciebie. Twój toolchain, bez zmian.
- 03
Wyślij do 100 w jednej paczce.
Do 100 niezależnych wiadomości w jednym wywołaniu, każda z własnym odbiorcą i zmiennymi, walidowana jako jedna całość — nigdy nie wyślesz połowy.
- 04
Idempotencja w kontrakcie.
Każde wysłanie przyjmuje klucz idempotencji, więc ponowione żądanie po timeoucie zwraca oryginalny wynik zamiast wysyłać wiadomość podwójnie.
- 05
Webhook przy każdej zmianie stanu.
Zaakceptowana, dostarczona, otwarta, kliknięta, odrzucona, zgłoszona. Każdy webhook podpisany HMAC, chroniony przed powtórzeniem, idempotentny — ta sama struktura na każdym kanale.
Wyślij pierwsze żądanie ze swojej aplikacji.
Utwórz konto i klucz API, a następnie wyślij wiadomość testową zgodnie z instrukcją wysyłki.
Wysyłasz już gdzie indziej? Przejdź w jedno popołudnie.
Wywołanie, które już wykonujesz, prawie się nie zmienia: podmień klienta, zachowaj szablony, przekieruj 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ść albo sto, jedno wywołanie.
Wyślij do 100 niezależnych wiadomości w jednym żądaniu, każdą z własnym odbiorcą i zmiennymi. Paczka jest walidowana jako całość: jedna błędna wiadomość odrzuca wywołanie z kodem 422, więc nigdy nie wyślesz połowy. Jeden 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)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);
Dołącz własny kontekst do każdego wysłania.
Tagi to pełnoprawny, filtrowalny wymiar: podziel dane o dostarczaniu i zaangażowaniu według kampanii, szablonu lub eksperymentu w statystykach API (do 20 na wiadomość). Metadane to dowolny JSON, do 2 KB, który wraca nietknięty przy każdym odczycie i webhooku, dzięki czemu 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" },
});
Śledź każdą wiadomość przez cały jej cykl życia.
Wysłanie zwraca 202 natychmiast; wynik dociera jako webhook per odbiorca. Zweryfikuj jeden podpis, rozróżnij po typie: ta sama struktura, którą już obsługujesz dla SMS, głosu 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 i skargi aktualizują listę blokad odbiorców. Wypisania rejestrują rezygnację. Te wpisy są sprawdzane przy przetwarzaniu kolejnych wysyłek.
email.acceptedWiadomość 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 scenariusz, zanim wdrożysz na produkcję.
W sandboxie adres odbiorcy decyduje o wyniku, więc stan twojego konta nie musi. Wyślij na delivered@messagebird.dev, aby uzyskać czyste dostarczenie, lub na bounce@, softbounce@, deferred@, complaint@ i suppressed@, aby przeprowadzić 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 dedykowany IP przechodzi warmup, zanim przejmie pełny wolumen.
Dowiedz się więcej w dokumentacji.
Przeczytaj przewodnik wysyłania, skonfiguruj zdarzenia e-mail i webhooki lub, jeśli przechodzisz od innego dostawcy, skorzystaj z przewodnika migracji z SendGrid, SES, Mailgun lub Resend.
Przetestuj zachowanie związane z wysyłką.
Działające wywołanie wysyłki to początek integracji. Przećwicz obsługę odbić i skarg, obsłuż zduplikowane dostarczenia webhooków i zdecyduj, jak Twoja aplikacja planuje wiadomości lub odbiera odpowiedzi.
Przejdź do potrzebnego przepływu pracy
Wybierz produkt lub przewodnik pasujący do kolejnego zadania.
161%
Wzrost wskaźnika otwarć e-maili opisany w historii klienta Zillow.
Zbudowane z Bird
Gdy pojawia się właściwy dom, e-mail musi dotrzeć na czas.
Zillow przeniósł czasowo wrażliwe powiadomienia o nieruchomościach do Bird, zyskując możliwość obsługi nagłych wzrostów wysyłki i analitykę do analizy zaangażowania. Zespół odnotował 161% wzrost wskaźnika otwarć w pierwszym miesiącu.
Planujesz migrację lub wysyłkę na większą skalę?
Skontaktuj się z działem sprzedażyPytania o wysyłkę e-mail
Czy mogę wysyłać zarówno e-maile transakcyjne, jak i marketingowe?
Co się stanie, jeśli żądanie przekroczy limit czasu i ponowię je?
Czy mogę zaplanować wysyłkę na później?
Czy mogę załączać pliki?
Połącz wysyłkę z resztą swojego przepływu pracy
Porozmawiaj z naszym zespołem e-mail
Zbuduj swoją kolejną integrację e-mail.
Omów wiadomości transakcyjne, wysyłki masowe i zdarzenia dostarczania. Pomożemy Ci zaplanować integrację, wolumen wysyłki i migrację.
Utwórz konto, następnie utwórz klucz API i wyślij wiadomość testową.
Skaluj bez
utraty kontroli.
Organizuj zespoły w obszarach roboczych, kontroluj dostęp do API i śledź zmiany w logach audytu.
Audit log
Production- Workspace
- Production
- Resource
- Delivery agent
- ReadRead & write