Belgelere geç
SDK

Toplu gönderim

`emails.sendBatch`: en fazla 100 mesaj, öğe başına sonuç.

emails.sendBatch

send-batch.ts
const result = await openemail.emails.sendBatch(invoices.map(toMessage)) console.log(result.sent, 'sent,', result.failed, 'failed') for (const item of result.items) {  if (item.status === 'error') console.error(item.index, item.error.code, item.error.message)  else console.log(item.index, item.email.id)}

items, her girdi için sırayla bir kayıt tutar; her biri ya mesajıyla birlikte ok ya da o mesajın reddedileceği zarfla birlikte error olur. Hiçbir şey geri alınmaz; dolayısıyla failed > 0, toplu isteği yeniden göndermek için bir gerekçe değil, üzerinde işlem yapılacak bir listedir.

Tek bir idempotency anahtarı tüm toplu isteği kapsar ve sunucu onu öğe başına genişletir; böylece yeniden denenen bir toplu istek, mesajları ilkine indirgemek yerine her birini yeniden oynatır.

Parametreler: emails.sendBatch

emailsEmailSend[]zorunlu
Bir ila 100 mesaj; `{ "emails": [...] }` olarak serileştirilir ve verilen sırayla tek tek kabul edilir. Boş bir dizi, 100'den fazla öğe veya `translate` taşıyan 10'dan fazla öğe, çağrının tamamını `emails` üzerinde bir `validation_error` ile reddeder. Eksik bir `emails:send` kapsamı, dizi ya da `{ emails: [...] }` olmayan bir gövde ve bozuk bir `Idempotency-Key` da aynı şekilde reddedilir; hepsi tek bir mesaj bile gönderilmeden önce.
options.idempotencyKeystring
Toplu isteği süreçler arasında yinelenmeye karşı korur. İstemci her çağrıda yeni üretilmiş bir anahtar eklediği için kendi yeniden denemeleri asla çift gönderim yapmaz; sunucu da aldığı anahtarı öğe başına `key/0`, `key/1` biçiminde, sizin anahtarınızda bulunamayacak bir karakter olan eğik çizgiyle ayırarak genişletir; böylece yüz mesaj üzerindeki tek bir anahtar onları ilkine indirgeyemez.
emails[].fromRecipientInputzorunlu
Gönderen; çıplak bir adres, `Name <addr@host>` veya bir nesne olarak. Yedek gönderen yoktur ve anahtarın bu adrese izni olmalıdır; bir ret yalnızca o öğeyi başarısız kılar ve `from_address_forbidden` koduyla bir `permission_error` olur.
emails[].toRecipientInput | RecipientInput[]zorunlu
En az bir alıcı; tek bir alıcı istemci tarafından diziye sarılır. `to`, `cc` ve `bcc` toplamında en fazla 50 adres; toplu istek genelinde değil mesaj başına sayılır.
emails[].ccRecipientInput | RecipientInput[]
Varsayılan olarak yoktur ve `to` ile `bcc` ile aynı 50 adreslik toplama sayılır.
emails[].bccRecipientInput | RecipientInput[]
Varsayılan olarak yoktur ve aynı 50 adreslik toplama sayılır. `Bcc`, `headers` içinde ayarlanamayan adlardan biridir; dolayısıyla gizli kopya göndermenin tek yolu budur. Başlık biçimi, adresi gizli tutan alıcı başına zarfı bozardı.
emails[].replyToRecipientInput
Yanıtların gideceği yer. `headers` işlendikten sonra uygulanır; dolayısıyla orada da ayarladığınız bir `Reply-To` başlığına ikincisini eklemek yerine onun üzerine yazar.
emails[].subjectstring
En fazla 998 karakter, RFC 5322 satır sınırı; varsayılanı boş dizgedir. Boş bir konu, `template` bir konu sağlıyorsa şablonun kendi konusuna düşer.
emails[].htmlstring
HTML parça, en fazla bir milyon karakter; iki gövde de verildiğinde alıcıların gördüğü parçadır. `html`, `text`, `template` veya `draftId` alanlarından biri zorunludur ve hiçbirini taşımayan bir öğe `html` üzerinde `validation_error` ile başarısız olur.
emails[].textstring
Düz metin parça, en fazla bir milyon karakter. İkisi birden gönderilebilir; bu yoldaki her taşıma katmanı tek bir dizgeden tek bir gövde kurar, dolayısıyla `html` varsa o kazanır.
emails[].headersRecord<string, string>
Yalnızca `X-*`, `List-*`, Reply-To, Precedence, Auto-Submitted, Importance, Priority ve Feedback-ID; taşıma katmanının kendi ayarladığı her şey (From, To, Bcc, Subject, Message-ID, DKIM ve ARC başlıkları) sessizce düşürülmek yerine `reserved_header` olarak reddedilir. Değerler en fazla 998 karakterdir ve CR, LF veya NUL taşıyamaz, çünkü ikinci bir satır ikinci bir başlık demektir.
emails[].attachmentsAttachmentInput[]
Mesaj başına en fazla 20 dosya; satır içi dosyalar çözüldükten sonra toplam 5 MB olmak üzere, toplu istek başına değil mesaj başına sayılır. `content` ağ üzerinde base64'tür; bayt geçirirseniz istemci kodlar ve elle yazılmış base64'ün çağrı yığınını düzenli olarak patlattığı tek yer de burasıdır. Bir `{ fileId }` girdisi, çalışma alanında zaten bulunan bir dosyayı gösterir ve satır içi üst sınıra sayılmaz.
emails[].threadIdstring
Var olan bir konuşma dizisine yanıt verir, en fazla 256 karakter. Taşıma katmanı In-Reply-To ve References başlıklarını bundan yazar; yanıtın konuşmanın yanına değil içine düşmesini sağlayan şey budur.
emails[].draftIdstring
Kaydedilmiş bir taslağın içeriğini bu zarf altında gönderir, en fazla 256 karakter. Ağ üzerinde giden şey burada kurulan alıcılar, konu ve başlıklardır.
emails[].template{ id, version?, props?, slots? }
Saklanan bir şablonu sunucu tarafında, id (`tpl_…`) veya slug ile işler; `version` bir revizyonu sabitler, `props`/`slots` ise onu doldurur. Öğe kabul edildiğinde bir kez çözümlenir ve hem `html`/`text` ile hem de `draftId` ile birlikte kullanılamaz, çünkü bunların her biri mesajın ne içerdiğine verilen ikinci bir yanıttır.
emails[].scheduledAtDate | string
Bir `Date`, bir ISO-8601 anı veya `PT1H` gibi bir süre; en az bir saniye ileride ve en fazla 365 gün sonrası. Öğeler birbirinden bağımsız zamanlanır; dolayısıyla tek bir toplu istek yüz farklı gönderim zamanı taşıyabilir.
emails[].cancellableForSecondsnumber
Anlık bir gönderimde saniye cinsinden geri alma penceresi; 0 ile 900 arasında bir integer, varsayılan 0. 0'ın üzerindeki her değer aynı öğedeki `scheduledAt` ile birlikte reddedilir, çünkü zamanlanmış bir mesaj gidene kadar zaten iptal edilebilir.
emails[].trackingTrackingRequest
`opens` ve `clicks`; her biri bağımsız olarak isteğe bağlıdır ve her biri yalnızca bu mesaj için ayarı geçersiz kılar. Belirtmediğiniz bir anahtar, mesajın gönderildiği adresin ayarına, o da yoksa Tüm adresler ayarına düşer; bu ayar da bunlardan biri kapatmadıkça açıktır.
emails[].tagsRecord<string, string>
En fazla 10 etiket; anahtarlar `A-Za-z0-9_-` karakterlerinden 1 ila 64 karakter, değerler en fazla 256 karakter. Mesajda aynen geri döndürülür ve asla yorumlanmaz: `emails.list` yalnızca `status`, `from`, `limit` ve `cursor` alır; dolayısıyla bir etiket, mesaj bulmanın bir yolu değil, elinizdeki bir mesajdan okuyacağınız bir şeydir.
emails[].translateSendTranslateOptions
Bu öğeyi başka bir dilde gönderir; kabul anında çözümlenir, böylece onaylanan sözcükler giden sözcüklerin ta kendisi olur. Tek bir toplu istekte en fazla 10 öğe bunu taşıyabilir: her biri birkaç model çağrısı harcar ve öğeler sırayla işlenir, bu yüzden daha büyük bir toplu istek gönderimin ortasında kesilirdi. Bunun üzerinde çağrının tamamı, hiçbir şey gönderilmeden önce `emails` üzerinde `too_many_items` olarak reddedilir.

Yanıt: BatchResultResource

itemsBatchItemResource[]
Gönderdiğiniz sırayla, girdi başına bir kayıt. Hiçbir şey geri alınmaz; dolayısıyla bu, bir işlem raporu değil her mesaja ne olduğunun kaydıdır. API; mesajların hepsi, bir kısmı veya hiçbiri kabul edilmiş olsun 207 döndürür, bu yüzden promise her durumda çözülür ve dallanılacak şey öğe başına gelen `status` değeridir.
sentnumber
Kaç öğenin KABUL EDİLDİĞİ; bu, kaç tanesinin gittiğiyle aynı şey değildir. Bir öğe `ok` olup yine de `failed` veya `partial` bir `email.status` taşıyabilir, çünkü satır oluştuktan sonra mesajı reddeden bir taşıma katmanı, reddedilmiş bir istek değil bir teslimat sonucudur.
failednumber
Kaç kaydın `error` taşıdığı. `failed > 0`, toplu isteği yeniden göndermek için bir gerekçe değil, üzerinde işlem yapılacak bir listedir. Kabul edilen mesajlar çoktan gitmiştir.
items[].indexnumber
Bu kaydın mesajının, gönderdiğiniz dizideki konumu. Sıranın yanı sıra bir alan olarak da taşınır; böylece `items` dizisini filtreleyen veya sıralayan kod yine de hangi girdinin başarısız olduğunu söyleyebilir.
items[].status'ok' | 'error'
Birleşim tipinin ayırt edicisi: `ok` kayıtları `email`, `error` kayıtları `error` taşır; hiçbir kayıt ikisini birden taşımaz.
items[].emailSentEmailResource
Kabul edilen mesaj; yalnızca `ok` kayıtlarında ve tek bir gönderimin döndürdüğü biçimde. Hiç `tracking` anahtarı taşımaz, çünkü etkileşim daha sonra bildirilir ve kabul anında bildirilecek bir şey yoktur.
items[].email.replayedboolean
Türetilen `Idempotency-Key`, zaten var olan bir gönderimle eşleştiğinde true olur; yani yeni bir şey gönderilmemiştir ve bu, özgün mesajdır.
items[].error{ type: string; code: string; message: string; param?: string }
Bu tek mesajın neden reddedildiği; yalnızca `error` kayıtlarında. API'nin hata zarfının `docUrl` ve `requestId` çıkarılmış hâlidir: bunlar isteği tanımlar ve istek bir bütün olarak başarılı olmuştur.
items[].error.typestring
İstemcinin üzerinden dallanabileceği kategori: `validation_error`, `permission_error`, `not_found_error`, `conflict_error` ve diğerleri. Bu küme donmuştur ve `code` alanının aksine büyümeyecektir.
items[].error.codestring
Belirli hata: `from_address_forbidden`, `invalid_email_address`, `too_many_recipients`, `reserved_header`, `message_too_large`, `unknown_parameter`. Açık ve eklemelidir; bu yüzden tanımadığınız bir kodu `type` değeri gibi ele alın.
items[].error.messagestring
Bir insan için yazılmış tek cümle; varsa sorunlu değeri adıyla belirtir. Kararlı bir tanımlayıcı değildir. `code` üzerinden dallanın.
items[].error.paramstring
Reddedilen alan, O MESAJIN içinde noktalı bir yol olarak: `to.0`, `from`, `attachments`. Hata hiçbir alanı göstermiyorsa bulunmaz ve asla toplu istekteki konumla öneklenmez; o iş `index` alanınındır.