Belgelere geç
Python

Toplu gönderimler

`broadcasts.preview`, `send`, `list`, `list_all`, `iterate`, `get`, `list_recipients`, `list_all_recipients`, `iterate_recipients`, `get_recipient`, `stats`, `analytics` ve `cancel`.

Her yöntem

broadcasts.py
import time from openemail import openemailfrom openemail.types import BroadcastCreate draft: BroadcastCreate = {    'audienceIds': ['aud_4c1b8e2a7d9f05c36b4e8a71'],    'from': 'Acme <[email protected]>',    'subject': '{{firstName|Hello}}, the September release is out',    'html': '<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>',    'text': 'Hi {{firstName|there}}, here is what changed this month. Unsubscribe: {{unsubscribeUrl}}',    'tags': {'campaign': 'release-2026-09'},} reach = openemail.broadcasts.preview(draft)print(reach['recipients'], reach['unsubscribed'], reach['suppressed']) broadcast = openemail.broadcasts.send(draft) latest = openemail.broadcasts.get(broadcast['id'])while latest['status'] in ('scheduled', 'queued', 'sending'):    time.sleep(5)    latest = openemail.broadcasts.get(broadcast['id']) for copy in openemail.broadcasts.iterate_recipients(broadcast['id']):    print(copy['email'], copy['status'], copy['opens'], copy['clicks']) bounced = openemail.broadcasts.list_recipients(broadcast['id'], filter='bounced')if bounced['items']:    content = openemail.broadcasts.get_recipient(broadcast['id'], bounced['items'][0]['emailId'])    print(content['subject'], content['bouncedAt']) stats = openemail.broadcasts.stats(broadcast['id'], grain='day')print(stats['totals']['opened'], stats['totals']['clicked'], stats['totals']['unsubscribed']) lately = openemail.broadcasts.stats(broadcast['id'], days=1)print(lately['window']['opened'] if lately['window'] else None) month = openemail.broadcasts.analytics(days=30)for row in month['broadcasts']:    print(row['subject'], row['sent'], row['opened']) later = openemail.broadcasts.send({**draft, 'scheduledAt': 'P1D'})openemail.broadcasts.cancel(later['id']) history = openemail.broadcasts.list(audience_id=draft['audienceIds'][0])print(latest['status'], latest['counts']['sent'], len(history['items']))

Toplu gönderim, bir ya da daha fazla kitledeki herkese her kişi için ayrı bir kopya olarak tek bir ileti gönderir. Her kopyanın tam olarak bir alıcısı vardır, cc ya da bcc yoktur; bu yüzden kimse başka kime gittiğini görmez ve her kopya kendi msg_ kimliği, olayları, izlemesi ve webhook'ları olan sıradan bir e-postadır. list_recipients onları her birine ne olduğuyla birlikte listeler. Kopyalar Gönderilenler klasörüne kaydedilmez, çünkü toplu gönderim kayıttır.

send, toplu gönderim queued durumundayken ya da scheduledAt verirseniz scheduled durumundayken hemen döner ve gönderim arka planda sürer. send için emails:send ve audiences:read, preview için audiences:read, list, list_all, iterate, get, list_recipients, list_all_recipients, iterate_recipients, get_recipient, stats ve analytics için emails:read, cancel için emails:send gerekir.

Her send bir Idempotency-Key taşır; idempotency_key= ile verdiğiniz ya da SDK'nın oluşturduğu. Bu yüzden bir ağ hatasından sonra yeniden deneme, iki kez göndermek yerine ilk denemenin oluşturduğu toplu gönderimle yanıt verir. preview, get, cancel ve tüm okumalar güvenle tekrarlanabilir ve yeniden denenir.

Birleştirme alanları

subject, html ve text her kişi için kendi kişi kaydından doldurulur. {{firstName}} kişi adının ilk sözcüğü, {{lastName}} geri kalanı, {{name}} tam ad, {{email}} kopyanın gittiği adres ve {{unsubscribeUrl}} onun aboneliğini sonlandıran bağlantıdır.

Her alan çizgiden sonra bir yedek değer alır; kişinin o alan için değeri yoksa kullanılır, bu yüzden {{firstName|there}} adsız kaydedilmiş bir kişi için "there" olur. Değerler html içinde kaçırılır ve diğer her {{…}} tam yazıldığı gibi bırakılır.

Kaydedilmiş bir şablonu göndermek için html ve text yerine template geçirin. Aynı beş değer ona özellik olarak ulaşır, ama yalnızca şablonun tanımladığı özellikler; bu yüzden firstName'i tanımlayan bir şablon onu alır, tanımlamayan ise bu yüzden hiçbir zaman reddedilmez. template.props içindeki her şey her kopyaya aynı biçimde gider.

Abonelikten çıkma

Her kopya, bir posta istemcisinin kendi abonelikten çıkma düğmesini göstermesini sağlayan tek tık abonelikten çıkma başlıklarını taşır; büyük posta kutusu sağlayıcılarının toplu postadan istediği de budur. {{unsubscribeUrl}}'i kendisi yerleştirmeyen bir html ya da text gövdesine bağlantıyı içeren tek satırlık bir alt bilgi eklenir. Şablon tam olduğu gibi gönderilir, bu yüzden {{unsubscribeUrl}}'i şablona koyun.

Abonelikten çıkmak, kişiyi o toplu gönderimin gittiği her kitlede abonelikten çıkmış olarak işaretler ve AudienceContactResource.unsubscribedAt bunu audiences.list_contacts üzerinde gösterir. Kişi kitlede ve adres defterinde kalır, diğer kitlelerine dokunulmaz ve ona tek tek gönderilen postalar gitmeye devam eder. Onu kitleden çıkarıp yeniden eklemek yeniden abone yapar.

Kimler atlanır

Toplu gönderim, audienceIds içindekilerden en az birinde bulunan her kişiye, kaçında bulunursa bulunsun bir kez ulaşır. İçinde bulunduğu bu kitlelerin her birinden abonelikten çıkmış kişiyi ve bir geri dönme ya da şikâyet sonrasında veya biri eklediği için engelleme listesinde olan adresi atlar. send'den sonra ama gönderim ona ulaşmadan önce kitlelerden birine eklenen kişi dahil edilir.

preview hiçbir şey göndermeden aynı sayıları döndürür: recipients, unsubscribed ve suppressed. Kimseye ulaşmayacak bir send 422 no_recipients fırlatır.

Herhangi bir şey yazılmadan önce gönderimin tamamı planın aylık gönderim sayısıyla karşılaştırılır; bu yüzden kotanın karşılayamadığı bir toplu gönderim 429 send_quota_exceeded fırlatır ve geride hiçbir şey bırakmaz. Her kopya bir gönderim sayılır.

Durum ve ilerleme

get, counts'u kopyalardan canlı okur, bu yüzden bir toplu gönderim sürerken onu yoklayın. status, scheduled ya da queued'dan sending'e geçer ve teslim edilen her kopya gittiğinde ya da başarısız olduğunda sent üzerinde kalır. Kopyalar hâlâ beklerken, completedAt son kişiye ulaşıldığını söyledikten sonra bile sending kalır. failed, toplu gönderimin tamamının durduğu anlamına gelir ve lastError nedenini söyler: from adresinden artık gönderilemiyor, şablon çözümlenmeyi bıraktı, plan yarı yolda bitti, gönderimin kendisi sürekli başarısız oldu ya da tek bir kopya bile yazılamadı.

cancel, scheduled, queued ya da sending olan bir toplu gönderimi durdurur. Kimse eklenmez ve hâlâ bekleyen her kopya iptal edilir, gitmiş kopyalar ise geri alınamaz. Her kopya gittikten sonra cancel 409 broadcast_not_cancellable fırlatır ve iptal edilmiş bir toplu gönderimi iptal etmek onu olduğu gibi döndürür.

Kime ulaştı

list_recipients, bir toplu gönderimin gittiği kişilerin bir sayfasını, kopya başına bir satır, adrese göre sıralı ve items, hasMore ve nextCursor içeren bir sözlük olarak döndürür. list_all_recipients tüm sayfaları dolaşıp tek bir listeye toplar, iterate_recipients ise her seferinde bir kopya verir ve sonraki sayfayı yalnızca döngü istediğinde getirir. limit 1 ile 200 arasındadır ve varsayılanı 50'dir; bir cursor aynı filter ve q ile geri gönderilir.

filterTuttukları
pendingHâlâ kuyrukta, zamanlanmış ya da gönderilmekte olan kopyalar.
sentGönderilen kopyalar.
deliveredAlıcı sunucunun kabul ettiği kopyalar.
openedEn az bir kez açılan kopyalar.
not_openedGönderilmiş ve hiç açılmamış kopyalar.
clickedEn az bir izlenen tıklaması olan kopyalar.
bouncedGeri dönen kopyalar.
complainedKişinin spam olarak bildirdiği kopyalar.
failedBaşarısız olan ya da iptal edilen kopyalar.
unsubscribedToplu gönderimden sonra abonelikten çıkan kişiler.

BROADCAST_RECIPIENT_FILTERS her filtreyi adlandırır, q ise adreste ve adda büyük/küçük harf ayrımı yapmadan arar. Açmalar ve tıklamalar görsel proxy'lerini ve bağlantı tarayıcılarını dışarıda bırakır ve toplu gönderim izleme kapalıyken çıktıysa 0 kalır.

get_recipient(id, email_id) tek bir kopya döndürür: aynı satır, artı birleştirme alanları doldurulmuş ve kişinin kendi abonelikten çıkma bağlantısıyla, o kişinin aldığı hâliyle subject, html ve text. HTML, açma ve tıklama izlemesi eklenmeden önceki hâlidir. Bu toplu gönderimin kopyası olmayan bir email_id 404 recipient_not_found fırlatır, bilinmeyen bir toplu gönderim ise 404 broadcast_not_found fırlatır.

stats toplamları ve bir seriyi döndürür. totals, sent, delivered, bounced, complained ve failed kopyaları, hâlâ bekleyenler için pending ile birlikte, ve opened, clicked ve unsubscribed kişileri sayar; opens ve clicks olay sayılarıdır. series seyrektir ve en eskiden başlar; bir şeyin olduğu her grain (minute, hour ya da day, varsayılan hour) için bir dilim vardır ve UTC'nin doğusundaki offset_minutes ile bölünür. Her kişiyi, başına ilk geldiği anda bir kez sayar, bu yüzden toplamı toplamlara eşittir.

Belirli adreslerle ya da alan adlarıyla sınırlı bir anahtar yalnızca sahip olduğu bir adresten ya da alan adından gönderilmiş toplu gönderimlere ulaşır. list, list_all ve iterate diğerlerini dışarıda bırakır; get, alıcı metotları, stats ve cancel ise onlar için 404 broadcast_not_found fırlatır.

Yanıt: BroadcastResource

get ve cancel her biri bunlardan birini döndürür; send ise bir SentBroadcastResource döndürür: aynı alanlar artı replayed; yanıt, aynı idempotency anahtarıyla yapılmış daha önceki bir çağrının oluşturduğu toplu gönderim olduğunda True olur. list bunlardan bir sayfayı en yeniden eskiye items, hasMore ve nextCursor içeren bir sözlük olarak döndürür; list_all ve iterate her sayfayı gezer. preview, audienceIds, recipients, unsubscribed ve suppressed içeren bir BroadcastPreviewResource döndürür. list_recipients bir BroadcastRecipientResource satırları sayfası, get_recipient bir BroadcastRecipientContentResource, stats ise bir BroadcastStatsResource döndürür.

idstr
Kalıcı tanıtıcı, `brd_` ardından 24 onaltılık karakter.
statusBroadcastStatus
`scheduled`, `queued`, `sending`, `sent`, `cancelled` ya da `failed`. Her birini `BROADCAST_STATUSES` adlandırır.
modeApiKeyMode
Onu oluşturan anahtara göre `live` ya da `test`. Bir test toplu gönderiminin kopyaları gönderildi olarak işaretlenir ve kimseye teslim edilmez.
sourceEmailSource | str
Nereden başlatıldığı: anahtar için `api`, bağlı bir uygulama için `oauth`, uygulama için `composer`, bir asistan için `mcp`.
audienceIdslist[str]
Gönderildiği kitleler, her biri bir kez.
fromstr
Her kopyanın gönderildiği adres.
subjectstr
Yazıldığı gibi konu, birleştirme alanlarıyla birlikte. Konuyu bir şablon sağladığında boştur.
countsBroadcastCounts
`recipients`, `send` sırasında alınan tahmindir. `created` yazılan kopyaları, `skipped` o zamana kadar adresleri engellendiği için atlanan kişileri, `failedToQueue` ise kopyası yazılamayan kişileri sayar. `queued`, `sending`, `sent`, `failed` ve `cancelled` kopyaları her birinin şu anki durumuna göre sayar.
lastErrorstr | None
Toplu gönderimin neden başarısız olduğu ya da yazılamayan en son kopya ve nedeni. Hiçbir şey ters gitmediği sürece `None`.
scheduledAtstr | None
ISO-8601 UTC, gönderimin başlaması gereken zaman. Hemen gönderilen bir toplu gönderim için `None`.
startedAtstr | None
ISO-8601 UTC, gönderimin ilk kişilere ulaştığı zaman.
completedAtstr | None
ISO-8601 UTC, son kişiye ulaşıldığı zaman. Bundan sonra da kopyalar gitmeyi bekliyor olabilir.
cancelledAtstr | None
ISO-8601 UTC, `cancel`'ın onu durdurduğu zaman.
createdAtstr
ISO-8601 UTC, `send`'in çağrıldığı zaman. Liste sırasını belirler.
updatedAtstr
ISO-8601 UTC, gönderim ilerledikçe güncellenir.

Yanıt: BroadcastRecipientResource

list_recipients, list_all_recipients ve iterate_recipients sonuçlarının her satırı. get_recipient'ten gelen BroadcastRecipientContentResource, subject, html ve text ekler.

emailIdstr
Bu kişinin kopyasının `msg_` kimliği. `get_recipient` onu içeriğiyle birlikte okur, `emails.get` ise gönderilmiş bir e-posta olarak okur.
contactIdstr | None
Gittiği kişi ya da kişi o zamandan beri silindiyse `None`.
emailstr
Kopyanın gittiği adres.
namestr | None
Kişi kaydındaki ad.
statusstr
Kopyanın durumu: `queued`, `scheduled`, `sending`, `sent`, `failed` ya da `cancelled`.
sentAtstr | None
ISO-8601 UTC, kopyanın gönderildiği zaman.
deliveredAtstr | None
ISO-8601 UTC, alıcı sunucunun onu kabul ettiği zaman, ilk `email.delivered`.
bouncedAtstr | None
ISO-8601 UTC, geri döndüğü zaman, ilk `email.bounced`.
complainedAtstr | None
ISO-8601 UTC, kişinin onu spam olarak bildirdiği zaman, ilk `email.complained`.
failurestr | None
Başarısız olduysa kopyanın neden başarısız olduğu.
opensint
Kaydedilen açmalar, görsel proxy'lerinin ve tarayıcıların oluşturdukları hariç. İzleme kapalıysa 0.
firstOpenAtstr | None
ISO-8601 UTC, ilk açma.
clicksint
İzlenen bağlantılarda kaydedilen tıklamalar, tarayıcılar hariç.
firstClickAtstr | None
ISO-8601 UTC, ilk tıklama.
unsubscribedAtstr | None
ISO-8601 UTC, bu kişinin gönderimden sonra toplu gönderimin kitlelerinden birinden, bağlantısı üzerinden ya da başka bir yolla abonelikten çıktığı zaman.

Referans