Sign inGet started

Migracja z Mailjet

Ta strona mapuje payload Send API v3.1 z Mailjet, listę blokad i Event API na Bird. Postępuj zgodnie z głównym przewodnikiem migracji po kolei i korzystaj z tych mapowań w krokach 1, 3 i 4.
Największa zmiana strukturalna dotyczy koperty. Mailjet opakowuje każdą wysyłkę w tablicę Messages obiektów PascalCase (POST /v3.1/send). My przyjmujemy jeden płaski obiekt JSON zapisany małymi literami na każdy POST /v1/email/messages, a wiele niezależnych wiadomości trafia do endpointu batch zamiast do tablicy Messages.

Przekaż to swojemu agentowi

Wklej to do Claude Code, Cursora lub Codex. Agent przetworzy tę stronę na tle Twojego repozytorium, korzystając z dowolnego interfejsu Bird, który już posiada: serwera MCP, jeśli jest podłączony, lub CLI, jeśli jest zainstalowany i zalogowany.
Przykład kodu
I am moving an email integration from Mailjet to Bird. Route through it with me.
1. Check what you already have before setting anything up. If Bird's MCP server is connected, use its tools. If the Bird CLI is installed and signed in, use that. Either one is enough, and every step below is an action you take with whichever you have. Only if neither is present, follow https://bird.com/docs/ai/set-up-your-agent.md to set one up and sign me in. Every Bird docs page serves Markdown at its own URL with `.md` appended, so fetch that rather than the HTML.
2. Read https://bird.com/docs/guides/email/migrate/mailjet.md for the payload, suppression and event mapping, and https://bird.com/docs/guides/email/migrate.md for the order the steps go in.
3. Find and list my Mailjet usage in this repository before you change anything: the POST /v3.1/send call sites and any SDK wrappers around them, the event handler and the URL it is registered at, and every domain I send from.
4. Register each of those sending domains with Bird and give me the DNS records to publish, following https://bird.com/docs/guides/email/sending-domains.md. Leave every DNS record my current provider uses exactly as it is: Bird's records are published alongside them and both providers authenticate side by side until I switch traffic. Publishing DNS affects mail for the whole domain, so show me the records and let me publish them.
5. Export my blocklist from Mailjet and import it into Bird before any production traffic goes through Bird, so my first sends do not reach addresses that already bounced or complained. Read it through the contact-management API, or from the contact statistics pages if that is what I have access to. The Bird import takes one address per request and is idempotent, so a partial re-run is safe. https://bird.com/docs/guides/email/suppressions.md has the reason taxonomy.
6. Port the send call and the event handler using the mapping tables on the provider page. Mailjet posts a Messages array of PascalCase objects, and each entry becomes either one flat Bird send or one entry in a batch, so tell me which shape my call sites map onto before you rewrite them. EventPayload becomes metadata. Bird signs deliveries per Standard Webhooks rather than Mailjet's scheme, so treat verification as a rewrite rather than a URL change: https://bird.com/docs/guides/webhooks.md and https://bird.com/docs/guides/email/events.md.
7. Run my whole integration against Bird's mail sandbox before any production traffic, following https://bird.com/docs/guides/email/testing-sandbox.md. Sandbox sends run the real pipeline without reaching an inbox or touching my sending reputation.
8. Stop and ask me wherever a step needs a decision. Do not point production traffic at Bird until I have seen the sandbox results and replied with the words cut over to Bird. Retiring the Mailjet path is a separate step that comes later: ask me again and wait for me to reply with the words retire the Mailjet path. A reply that agrees without naming what it is authorising is not authorisation. Finish by telling me what is left that only a person can do.

Zmapuj wywołanie wysyłki

Co robiMailjet (Send API v3.1)Bird
NadawcaFrom: { "Email", "Name" }from: string lub { "email", "name" }
OdbiorcyTo / Cc / Bcc: [{ "Email", "Name" }]to / cc / bcc: tablice
TematSubjectsubject
TreśćTextPart / HTMLParttext / html (co najmniej jedno)
Reply-toReplyTo: { "Email", "Name" }reply_to: tablica
Własne nagłówkiHeadersheaders: obiekt string → string
Kontekst zwrotnyEventPayload (string), zwracany ze zdarzeniamimetadata: dowolny JSON
Własny ID wysyłkiCustomID, zwracany ze zdarzeniamimetadata lub tags
Zapisany szablonTemplateID + Variablestemplate + template.parameters
ZałącznikiAttachments: { "ContentType", "Filename", "Base64Content" }attachments: { "content_type", "filename", "content" }
Obrazy inlineInlinedAttachments, z ContentIDattachments z content_id
Śledzenieustawienie konta/szablonutrack_opens / track_clicks (domyślnie true)
Kategoria(brak)category: marketing (domyślnie) lub transactional
Limity i wartości domyślne pól (liczba odbiorców, limity tagów i metadanych) znajdziesz w Wysyłanie e-maili.
Uwagi do migracji:
  • Rozpakuj tablicę Messages. Pojedyncza wysyłka w Mailjet to jeden wpis w Messages. U nas to całe ciało żądania. Tablica Messages z kilkoma wpisami mapuje się na nasz endpoint batch. Powtórzonych pól w jednym żądaniu nie można użyć do odwzorowania batcha.
  • Wielkość liter zmienia się z PascalCase na lowercase. Każde pole zmienia nazwę: HTMLParthtml, TextParttext, From.Emailfrom.email. To zmiana mechaniczna, ale dotyczy każdej wysyłki.
  • EventPayload staje się metadata. Mailjet zwraca pojedynczy string EventPayload przy każdym zdarzeniu. My zwracamy ustrukturyzowane metadata (JSON) i tags przy każdym zdarzeniu webhookowym, więc możesz rozdzielić dane korelacyjne na typowane pola. Zobacz tagi a metadane.
  • CustomID to uchwyt korelacyjny, a ponawianie żądań wymaga osobnego rozwiązania. CustomID w Mailjet jest przekazywany do zdarzeń na potrzeby śledzenia; nie deduplikuje. Deduplikacja w Mailjet to X-Mailjet-DeduplicateCampaign, wartość logiczna używana z X-Mailjet-Campaign, która zapobiega dotarciu kampanii do tego samego odbiorcy dwa razy. To gwarancja w zakresie kampanii, a nie bezpieczne ponowienie pojedynczego żądania. U nas umieść swój ID korelacyjny w metadata lub tags i użyj nagłówka Idempotency-Key, aby ponowione żądanie było bezpieczne.
  • Zapisane szablony przenoszą się bezpośrednio. TemplateID + Variables z Mailjet mapują się na nasze pole template (referencja po ID lub slugu) z wartościami w template.parameters. Zobacz wysyłanie z szablonem. Logika szablonów wykraczająca poza podstawianie zmiennych też się przenosi: warunki i pętle TemplateLanguage z Mailjet stają się {% if %} i {% for %} w Liquid w naszym szablonie.
  • Załączniki przenoszą się bezpośrednio. Base64Content z Mailjet to nasz base64 content, a InlinedAttachments + ContentID stają się wpisami attachments z content_id. Zobacz załączniki.

Wyeksportuj supresje

Mailjet przechowuje nieosiągalne i niepożądane adresy na swojej liście blokad (twarde/miękkie odbicia i zablokowane wysyłki) oraz osobno śledzi sygnały spamu i wypisania. Wyeksportuj zablokowane i odrzucone adresy ze stron statystyk kontaktów Mailjet lub pobierz je przez API do zarządzania kontaktami i przepuść listę przez pętlę importu. Jeśli wysyłasz maile marketingowe, przenieś też kontakty oznaczone jako wypisane, żeby te preferencje przetrwały migrację.

Przetłumacz zdarzenia webhookowe

Event API w Mailjet wysyła jeden trigger na typ zdarzenia. Mapowanie na nasz słownik zdarzeń:
RezultatMailjetBird
Zaakceptowano/przetworzono(brak)email.acceptedemail.processed
Dostarczonosentemail.delivered
Trwałe odbiciebounceemail.bounced / email.out_of_band_bounce
Zablokowanoblockedemail.rejected
Zgłoszenie spamuspamemail.complained
Otwarcieopenemail.opened
Kliknięcieclickemail.clicked
Wypisanieunsubemail.unsubscribed / email.list_unsubscribed
Dwie różnice warte uwzględnienia w kodzie:
  • Raportujemy etapy przed dostarczeniem jawnie. sent w Mailjet odpala się, gdy serwer pocztowy odbiorcy przyjmie wiadomość, co odpowiada naszemu email.delivered. My emitujemy też email.accepted i email.processed wcześniej, więc widzisz postęp wysyłki przed potwierdzeniem dostarczenia. Nie traktuj tych wcześniejszych zdarzeń jako dostarczenie.
  • Zdarzenia dotyczą poszczególnych odbiorców. Mailjet identyfikuje zdarzenia po MessageID. Nasze zdarzenia dostarczenia zawierają recipient_id obok email_id, więc wysyłka do wielu odbiorców generuje osobny strumień zdarzeń na odbiorcę. Podpisujemy dostarczenia zgodnie ze specyfikacją Standard Webhooks. Zobacz Webhooki i zdarzenia, żeby dowiedzieć się o weryfikacji.

Przełączenie

Przejdź przez domeny i DNS oraz test dymny w sandboxie w głównym przewodniku. Oba kroki są niezależne od dostawcy.

Kolejne kroki

  • Domeny wysyłkowe: rejestracja, cykl życia weryfikacji i rekordy DNS, które przekierowujesz
  • Webhooki i zdarzenia: konfiguracja endpointu i weryfikacja Standard Webhooks
  • Sandbox testowy: test dymny nowej integracji przed przełączeniem
  • Supresje: sprawdź zaimportowaną listę i sposób, w jaki ją utrzymujemy od tego momentu