SDK
Dërgimi i një batch-i
`emails.sendBatch`: deri në 100 mesazhe, rezultate për çdo element.
emails.sendBatch
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 mban një hyrje për çdo input, në rend, secila ose ok me mesazhin e saj, ose error me zarfin me të cilin ai mesazh do të ishte refuzuar. Asgjë nuk kthehet mbrapsht, pra failed > 0 është një listë mbi të cilën duhet vepruar dhe jo një arsye për ta ridërguar batch-in.
Një çelës idempotence e mbulon batch-in dhe serveri e zgjeron atë për çdo element, kështu që një batch i riprovuar riluan çdo mesazh në vend që t'i përmbledhë të gjithë te i pari.
Parametrat: emails.sendBatch
emailsEmailSend[]e detyrueshme- Nga një deri në 100 mesazhe, të serializuara si `{ "emails": [...] }` dhe të pranuara një nga një sipas rendit të dhënë. Një array bosh, më shumë se 100, ose më shumë se 10 elemente që mbajnë `translate` e refuzojnë të gjithë thirrjen me një `validation_error` mbi `emails`. Po ashtu edhe një scope `emails:send` që mungon, një trup që nuk është array ose `{ emails: [...] }`, dhe një `Idempotency-Key` i keqformuar, të gjitha para se të dërgohet qoftë edhe një mesazh i vetëm.
options.idempotencyKeystring- E deduplikon batch-in nëpër procese. Klienti bashkëngjit gjithsesi një çelës të sapogjeneruar te çdo thirrje, pra riprovimet e tij nuk dërgojnë kurrë dy herë, kurse serveri e zgjeron çelësin që merr për çdo element si `key/0`, `key/1` e kështu me radhë, të ndarë me pjerrake, një karakter që çelësi juaj nuk lejohet ta përmbajë, kështu që një çelës i vetëm mbi njëqind mesazhe nuk mund t'i përmbledhë te i pari.
emails[].fromRecipientInpute detyrueshme- Dërguesi, si adresë e thjeshtë, si `Name <addr@host>` ose si objekt. Nuk ka dërgues rezervë dhe çelësi duhet ta ketë të lejuar këtë adresë; një refuzim e dështon vetëm atë element, si një `permission_error` me kodin `from_address_forbidden`.
emails[].toRecipientInput | RecipientInput[]e detyrueshme- Të paktën një marrës, dhe një i vetëm mbështillet në një array nga klienti. Më së shumti 50 adresa gjithsej mes `to`, `cc` dhe `bcc`, të numëruara për mesazh dhe jo për gjithë batch-in.
emails[].ccRecipientInput | RecipientInput[]- Parazgjedhja është asnjë, dhe numërohet te i njëjti total prej 50 adresash si `to` dhe `bcc`.
emails[].bccRecipientInput | RecipientInput[]- Parazgjedhja është asnjë, dhe numërohet te i njëjti total prej 50 adresash. `Bcc` është një nga emrat që `headers` nuk mund t'i caktojë, pra kjo është e vetmja mënyrë për një kopje të fshehtë. Forma me header do të prishte zarfin për çdo marrës që e mban adresën të fshehur.
emails[].replyToRecipientInput- Ku shkojnë përgjigjet. Zbatohet pas `headers`, kështu që mbishkruan një `Reply-To` që e keni caktuar edhe atje në vend që të shtojë një të dytë.
emails[].subjectstring- Më së shumti 998 karaktere, kufiri i rreshtit sipas RFC 5322, dhe parazgjedhja është një string bosh. Një subjekt bosh bie te ai i vetë template-it kur `template` jep një.
emails[].htmlstring- Pjesa HTML, me më së shumti një milion karaktere, dhe pjesa që shohin marrësit kur jepen të dy trupat. Kërkohet një nga `html`, `text`, `template` ose `draftId`, dhe një element pa asnjërin prej tyre dështon si `validation_error` mbi `html`.
emails[].textstring- Pjesa me tekst të thjeshtë, me më së shumti një milion karaktere. Të dyja mund të dërgohen, dhe çdo transport në këtë rrugë ndërton një trup të vetëm nga një string i vetëm, pra `html` fiton aty ku ka një të tillë.
emails[].headersRecord<string, string>- Vetëm `X-*`, `List-*`, Reply-To, Precedence, Auto-Submitted, Importance, Priority dhe Feedback-ID; çdo gjë që e vendos vetë transporti (From, To, Bcc, Subject, Message-ID, header-at DKIM dhe ARC) refuzohet si `reserved_header` në vend që të hiqet në heshtje. Vlerat janë me më së shumti 998 karaktere dhe nuk mund të mbajnë CR, LF ose NUL, sepse një rresht i dytë është një header i dytë.
emails[].attachmentsAttachmentInput[]- Më së shumti 20 skedarë për mesazh, me skedarët inline që arrijnë gjithsej 5 MB pasi dekodohen, të numëruar për mesazh dhe jo për batch. `content` është base64 në rrjet; jepni bajtet dhe klienti i kodon, që është i vetmi vend ku base64 i shkruar me dorë e shpërthen me siguri stack-un e thirrjeve. Një hyrje `{ fileId }` emërton një skedar që gjendet tashmë në hapësirën e punës dhe nuk numërohet në kufirin inline.
emails[].threadIdstring- Përgjigjuni brenda një thread-i ekzistues, me më së shumti 256 karaktere. Transporti shkruan In-Reply-To dhe References prej saj, që është ajo që e bën përgjigjen të ulet brenda bisedës dhe jo pranë saj.
emails[].draftIdstring- Dërgoni përmbajtjen e një drafti të ruajtur nën këtë zarf, me më së shumti 256 karaktere. Marrësit, subjekti dhe header-at e ndërtuar këtu janë ata që dalin në rrjet.
emails[].template{ id, version?, props?, slots? }- Renderon një template të ruajtur te serveri, sipas id-së (`tpl_…`) ose slug-ut, me `version` që fikson një revizion dhe me `props`/`slots` që e mbushin. Zgjidhet një herë, kur elementi pranohet, dhe refuzohet së bashku me `html`/`text` dhe me `draftId`, meqë secila prej tyre është një përgjigje e dytë për atë që përmban mesazhi.
emails[].scheduledAtDate | string- Një `Date`, një çast ISO-8601, ose një kohëzgjatje si `PT1H`; të paktën një sekondë në të ardhmen dhe më së shumti 365 ditë larg. Elementet planifikohen në mënyrë të pavarur, pra një batch i vetëm mund të mbajë njëqind kohë dërgimi të ndryshme.
emails[].cancellableForSecondsnumber- Një dritare anulimi në sekonda te një dërgim i menjëhershëm, një integer nga 0 deri në 900, me parazgjedhje 0. Çdo gjë mbi 0 refuzohet së bashku me `scheduledAt` te i njëjti element, meqë një mesazh i planifikuar është tashmë i anulueshëm derisa të niset.
emails[].trackingTrackingRequest- `opens` dhe `clicks`, secili opsional më vete dhe secili duke mbivendosur cilësimin vetëm për këtë mesazh. Një çelës që e lini jashtë bie te cilësimi i adresës nga e cila dërgohet mesazhi, ose përndryshe te Të gjitha adresat, që është i ndezur, veç nëse njëri prej tyre e ka fikur.
emails[].tagsRecord<string, string>- Më së shumti 10 etiketa, me çelësa nga 1 deri në 64 karaktere të marrë nga `A-Za-z0-9_-` dhe me vlera deri në 256. Kthehen ashtu siç janë te mesazhi dhe nuk interpretohen kurrë: `emails.list` pranon `status`, `from`, `limit` dhe `cursor` dhe asgjë tjetër, pra një etiketë është diçka për ta lexuar te një mesazh që e keni tashmë në dorë dhe jo një mënyrë për ta gjetur.
emails[].translateSendTranslateOptions- Dërgojeni këtë element në një gjuhë tjetër, e zgjidhur në çastin e pranimit, kështu që fjalët që u miratuan janë fjalët që dalin. Më së shumti 10 elemente në një batch mund ta mbajnë: secili shpenzon disa thirrje modeli dhe elementet ecin me radhë, pra një batch më i madh do të vritej në mes të dërgimit. Mbi atë numër e gjithë thirrja refuzohet si `too_many_items` mbi `emails`, para se të dërgohet asgjë.
Përgjigjja: BatchResultResource
itemsBatchItemResource[]- Një hyrje për çdo input, sipas rendit në të cilin i dërguat. Asgjë nuk kthehet mbrapsht, pra ky është një regjistër i asaj që ndodhi me secilin mesazh dhe jo një raport mbi një transaksion. API-ja përgjigjet me 207 qoftë kur u pranua çdo mesazh, qoftë kur u pranuan disa, qoftë kur nuk u pranua asnjë, pra premtimi zgjidhet sido që të jetë dhe `status` i secilit element është ai mbi të cilin duhet të degëzoni.
sentnumber- Sa elemente u PRANUAN, që nuk është e njëjta gjë me sa u nisën. Një element mund të jetë `ok` dhe prapë të mbajë një `email.status` `failed` ose `partial`, sepse një transport që e refuzon mesazhin pasi rreshti ekziston është një përfundim dërgese dhe jo një kërkesë e refuzuar.
failednumber- Sa hyrje mbajnë një `error`. `failed > 0` është një listë mbi të cilën duhet vepruar dhe jo një arsye për ta ridërguar batch-in. Mesazhet e pranuara kanë shkuar tashmë.
items[].indexnumber- Pozicioni që mbante mesazhi i kësaj hyrjeje te array-i që dërguat. Bartet si fushë dhe jo vetëm si rend, kështu që kodi që filtron ose rendit `items` mund të thotë prapë cili input dështoi.
items[].status'ok' | 'error'- Diskriminanti i bashkimit: `ok` mban `email`, `error` mban `error`, dhe asnjë hyrje nuk i mban të dyja.
items[].emailSentEmailResource- Mesazhi i pranuar, vetëm te një hyrje `ok`, në të njëjtën formë që kthen një dërgim i vetëm. Nuk mban asnjë çelës `tracking`, sepse angazhimi raportohet më vonë dhe në çastin e pranimit nuk ka çfarë të raportohet.
items[].email.replayedboolean- True kur `Idempotency-Key` i nxjerrë përkoi me një dërgim që ekzistonte tashmë, pra nuk u dërgua asgjë e re dhe ky është mesazhi origjinal.
items[].error{ type: string; code: string; message: string; param?: string }- Pse u refuzua ky mesazh i vetëm, vetëm te një hyrje `error`. Është zarfi i gabimit i API-së pa `docUrl` dhe `requestId`: ata e përshkruajnë kërkesën, dhe kërkesa në tërësi pati sukses.
items[].error.typestring- Kategoria mbi të cilën një klient mund të degëzojë: `validation_error`, `permission_error`, `not_found_error`, `conflict_error` e të tjera. Bashkësia është e ngrirë dhe nuk do të rritet, ndryshe nga `code`.
items[].error.codestring- Dështimi konkret: `from_address_forbidden`, `invalid_email_address`, `too_many_recipients`, `reserved_header`, `message_too_large`, `unknown_parameter`. E hapur dhe shtuese, prandaj trajtojeni një kod që nuk e njihni si `type`-in e tij.
items[].error.messagestring- Një fjali e shkruar për një person, që emërton vlerën problematike aty ku ka një të tillë. Jo një identifikues i qëndrueshëm. Degëzoni mbi `code`.
items[].error.paramstring- Fusha që u refuzua, si një shteg me pika brenda ATIJ mesazhi: `to.0`, `from`, `attachments`. Mungon kur dështimi nuk emërton asnjë fushë, dhe nuk merr kurrë si prefiks pozicionin në batch, për të cilin shërben `index`.