Python
Toplu gönderim
`emails.send_batch`: en fazla 100 mesaj, öğe başına sonuç.
emails.send_batch
import sys from openemail import openemailfrom openemail.types import EmailSend invoices = {'[email protected]': 'INV-4021', '[email protected]': 'INV-4022'} messages: list[EmailSend] = [ {'from': '[email protected]', 'to': to, 'subject': f'Invoice {number}', 'text': 'Attached.'} for to, number in invoices.items()] result = openemail.emails.send_batch(messages) print(result['sent'], 'sent,', result['failed'], 'failed') for item in result['items']: if item['status'] == 'error': print(item['index'], item['error']['code'], item['error']['message'], file=sys.stderr) else: print(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.send_batch
emailsSequence[EmailSend]zorunlu- Bir ila 100 mesaj; `{ "emails": [...] }` olarak serileştirilir ve verilen sırayla tek tek kabul edilir. Boş bir liste, 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ı ve bozuk bir `idempotency_key` da aynı şekilde reddedilir; ikisi de tek bir mesaj bile gönderilmeden önce.
idempotency_keystr- 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 sözlük 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 | list[RecipientInput]zorunlu- En az bir alıcı; tek bir alıcı istemci tarafından bir listeye 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 | list[RecipientInput]- Varsayılan olarak yoktur ve `to` ile `bcc` ile aynı 50 adreslik toplama sayılır.
emails[].bccRecipientInput | list[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[].subjectstr- 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[].htmlstr- 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[].textstr- 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[].headersdict[str, str]- 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[].attachmentslist[AttachmentInput]- 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. 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[].threadIdstr- 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[].draftIdstr- 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[].templateEmailSendTemplate- 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[].scheduledAtdatetime | str- Bir `datetime`, 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[].cancellableForSecondsint- 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 adresi (ya da onu yakalayan catch-all'ı) izler; bu da o adres açmadıkça kapalıdır.
emails[].tagsdict[str, str]- 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_`, `broadcast_id`, `scheduled_from` ve `scheduled_to` üzerinde filtreler; 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
itemslist[BatchItemResource]- 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 çağrı her durumda döner ve dallanılacak şey öğe başına gelen `status` değeridir.
sentint- 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.
failedint- 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[].indexint- Bu kaydın mesajının, gönderdiğiniz listedeki konumu. Sıranın yanı sıra bir alan olarak da taşınır; böylece `items` listesini filtreleyen veya sıralayan kod yine de hangi girdinin başarısız olduğunu söyleyebilir.
items[].statusLiteral['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.replayedbool- 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[].errorBatchItemResourceErrorError- 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.typestr- İ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.codestr- 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.messagestr- 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.paramNotRequired[str]- 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.