cURL
Wyślij pierwszy e-mail samym curlem: wyeksportuj klucz API, wyślij POST z wiadomością i pobierz ją metodą GET, aby śledzić dostarczenie. To surowy przepływ HTTP; wszystko, co robią SDK, zaczyna się tutaj.
1. Wyeksportuj klucz API
Utwórz klucz w dashboardzie w sekcji Developers > API keys (Wyślij pierwszy e-mail przeprowadza przez ten proces), a następnie wyeksportuj go:
Przykład kodu
export BIRD_API_KEY="bk_us1_..."Prefiks regionu wybiera host API: klucze bk_us1_ wywołują https://us1.platform.bird.com, a klucze bk_eu1_ wywołują https://eu1.platform.bird.com. Przykłady wysyłki używają us1; zmień host, jeśli Twój klucz ma inny region.
2. Wyślij e-mail
Wyślij POST do /v1/email/messages, wysyłając ze wspólnej domeny onboardingowej na adres sandboxa delivered@messagebird.dev. Nie potrzebujesz weryfikacji domeny ani prawdziwej skrzynki. Wybierz kartę cURL dla tego quickstartu.
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"msg = client.email.send(
from_={"email": "onboarding@messagebird.dev", "name": "Bird"},
to=["delivered@messagebird.dev"],
subject="Hello from Bird",
html="<p>My first Bird email.</p>",
)
print(msg.id, msg.status)package main
import (
"context"
"fmt"
"log"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
msg, err := client.Email.Send(context.Background(), bird.EmailSendParams{
From: "onboarding@messagebird.dev",
To: []string{"delivered@messagebird.dev"},
Subject: "Hello from Bird",
HTML: "<p>My first Bird email.</p>",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}$message = $bird->email->send(
from: 'Bird <onboarding@messagebird.dev>',
to: ['delivered@messagebird.dev'],
subject: 'Hello from Bird',
html: '<p>My first Bird email.</p>',
);
echo $message->getId(), ' ', $message->getStatus();bird email send \
--category transactional \
--cc manager@acme.com \
--from 'Acme Support <noreply@acme.com>' \
--header X-Campaign=spring-2026 \
--html '<h1>Hi there 👋</h1>' \
--metadata '{"user_id":"usr_12345"}' \
--reply-to support@acme.com \
--subject 'Welcome aboard' \
--tag category=welcome \
--text 'Hi there' \
--to 'Jane Doe <delivered@messagebird.dev>' \
--track-clicks=falsecurl -X POST https://us1.platform.bird.com/v1/email/messages \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "onboarding@messagebird.dev",
"to": ["delivered@messagebird.dev"],
"subject": "Hello from Bird",
"html": "<p>My first Bird email.</p>"
}'API odpowiada kodem 202: Bird przyjął e-mail i dostarcza go asynchronicznie. Pola *_count śledzą odbiorców przez stany dostarczenia. W początkowej odpowiedzi jeden odbiorca jest zaakceptowany, a żaden nie jest dostarczony:
Przykład kodu
{
"id": "em_01ky7ma8y2es1s2akzk53tmjn0",
"status": "accepted",
"category": "marketing",
"from": { "email": "onboarding@messagebird.dev" },
"to": [{ "email": "delivered@messagebird.dev" }],
"subject": "Hello from Bird",
"accepted_count": 1,
"processed_count": 0,
"delivered_count": 0,
"deferred_count": 0,
"bounced_count": 0,
"complained_count": 0,
"rejected_count": 0,
"open_count": 0,
"click_count": 0,
"track_opens": true,
"track_clicks": true,
"created_at": "2026-07-23T13:58:20.866Z"
}Surowe HTTP nie ma SDK, który generowałby klucz idempotentności za Ciebie. Aby zabezpieczyć się przed powtórzeniami, podaj klucz przy pierwszej próbie i użyj go ponownie przy kolejnych. Zobacz Idempotentność, gdzie znajdziesz przykład i limity powtórzeń.
3. Śledź dostarczenie
Pobierz wiadomość metodą GET po jej em_ ID i obserwuj, jak status zmienia się z accepted przez processed na delivered. Ponownie wybierz kartę cURL:
const msg = await bird.email.get("em_abc123");
msg.status; // "accepted" | "processed" | "delivered" | "bounced" | …
msg.delivered_count;
msg.bounced_count;message = client.email.get("em_abc123")
print(message.id, message.status, message.delivered_count)package main
import (
"context"
"fmt"
"log"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
msg, err := client.Email.Get(context.Background(), "em_abc123")
if err != nil {
log.Fatal(err)
}
fmt.Println(*msg.Status, *msg.DeliveredCount)
}$message = $bird->email->get('em_01krdgeqcxet5s7t44vh8rt9mg');
echo $message->getStatus();bird email get <message-id>curl https://us1.platform.bird.com/v1/email/messages/em_01ky7ma8y2es1s2akzk53tmjn0 \
-H "Authorization: Bearer $BIRD_API_KEY"Ponieważ odbiorcą jest adres sandboxa delivered@messagebird.dev, dostarczenie jest gwarantowane: wiadomość przechodzi przez prawdziwy pipeline Bird, ale nigdy nie trafia do prawdziwej skrzynki.
Kolejne kroki
- Dokumentacja email API: pełny schemat żądania i odpowiedzi.
- Uwierzytelnianie: klucze, zakresy uprawnień i nagłówek Authorization.
- Wyślij pierwszy e-mail: ten sam przepływ z dashboardem i SDK.
- Domeny wysyłkowe: zweryfikuj własną domenę do wysyłki produkcyjnej.
Powiązane zasoby
Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.
Obejrzyj przewodnikGetting started with emailZrozum koncepcjęShould I use a Bird SDK or call the API directly?Poznaj możliwościEmailPodążaj ścieżką naukiBuild your first integration
Wypróbuj ćwiczenie i uzyskaj brief wdrożeniowy