Pāriet uz dokumentāciju
SDK

Sūtīt partiju

`emails.sendBatch`: līdz 100 ziņojumiem, rezultāti katram atsevišķi.

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 satur vienu ierakstu katrai ievadei, secībā, un katrs ir vai nu ok ar savu ziņojumu, vai error ar aploksni, ar kuru šis ziņojums būtu atteikts. Nekas netiek atritināts atpakaļ, tāpēc failed > 0 ir saraksts, ar ko rīkoties, nevis iemesls sūtīt partiju no jauna.

Viena idempotences atslēga sedz visu partiju, un serveris to paplašina katram ierakstam, tāpēc atkārtota partija atkārto katru ziņojumu, nevis sakļauj tos visus pirmajā.

Parametri: emails.sendBatch

emailsEmailSend[]obligāts
No viena līdz 100 ziņojumiem, serializēti kā `{ "emails": [...] }` un pieņemti pa vienam dotajā secībā. Tukšs masīvs, vairāk nekā 100 vai vairāk nekā 10 ierakstu ar `translate` atsaka visu izsaukumu ar `validation_error` uz `emails`. Tāpat arī trūkstošs `emails:send` tvērums, ķermenis, kas nav masīvs vai `{ emails: [...] }`, un nepareizi veidota `Idempotency-Key` — un visi tie pirms tam, kad nosūtīts kaut viens ziņojums.
options.idempotencyKeystring
Novērš partijas dublēšanos starp procesiem. Klients jebkurā gadījumā katrā izsaukumā pievieno svaigi ģenerētu atslēgu, tāpēc tā paša atkārtojumi nekad nesūta divreiz, un serveris jebkuru saņemto atslēgu paplašina katram ierakstam kā `key/0`, `key/1` un tā tālāk, atdalot ar slīpsvītru — rakstzīmi, ko jūsu pašu atslēga nedrīkst saturēt —, tāpēc viena atslēga simt ziņojumiem tos nevar sakļaut pirmajā.
emails[].fromRecipientInputobligāts
Sūtītājs kā kaila adrese, `Name <addr@host>` vai objekts. Rezerves sūtītāja nav, un atslēgai šai adresei jābūt atļautai; atteikums izgāž tieši šo vienu ierakstu kā `permission_error` ar kodu `from_address_forbidden`.
emails[].toRecipientInput | RecipientInput[]obligāts
Vismaz viens adresāts, un vienu pašu klients ietin masīvā. Ne vairāk kā 50 adreses `to`, `cc` un `bcc` kopā, skaitot katram ziņojumam, nevis visai partijai.
emails[].ccRecipientInput | RecipientInput[]
Pēc noklusējuma nav neviena, un tas tiek ieskaitīts tajā pašā 50 adrešu kopsummā kā `to` un `bcc`.
emails[].bccRecipientInput | RecipientInput[]
Pēc noklusējuma nav neviena, un tas tiek ieskaitīts tajā pašā 50 adrešu kopsummā. `Bcc` ir viens no nosaukumiem, ko `headers` nedrīkst iestatīt, tāpēc šis ir vienīgais veids, kā sūtīt slēptu kopiju. Galvenes forma izjauktu katram adresātam atsevišķo aploksni, kas adresi tur slēptu.
emails[].replyToRecipientInput
Kurp iet atbildes. Tas tiek piemērots pēc `headers`, tāpēc tas pārraksta `Reply-To`, ko iestatījāt arī tur, nevis pievieno otru.
emails[].subjectstring
Ne vairāk kā 998 rakstzīmes, kas ir RFC 5322 rindas ierobežojums, un pēc noklusējuma tukša virkne. Tukšs temats tiek aizstāts ar veidnes paša tematu, ja `template` tādu dod.
emails[].htmlstring
HTML daļa, ne vairāk kā miljons rakstzīmju, un tā ir daļa, ko adresāti redz, kad doti abi pamatteksti. Ir vajadzīgs viens no `html`, `text`, `template` vai `draftId`, un ieraksts, kuram nav neviena no tiem, izgāžas kā `validation_error` uz `html`.
emails[].textstring
Vienkārša teksta daļa, ne vairāk kā miljons rakstzīmju. Var sūtīt abas, un katrs transports šajā ceļā veido vienu pamattekstu no vienas virknes, tāpēc `html` uzvar, ja tāds ir.
emails[].headersRecord<string, string>
Tikai `X-*`, `List-*`, Reply-To, Precedence, Auto-Submitted, Importance, Priority un Feedback-ID; viss, ko transports iestata pats (From, To, Bcc, Subject, Message-ID, DKIM un ARC galvenes), tiek atteikts kā `reserved_header`, nevis klusi nomests. Vērtības ir ne vairāk kā 998 rakstzīmes un nedrīkst saturēt CR, LF vai NUL, jo otra rinda ir otra galvene.
emails[].attachmentsAttachmentInput[]
Ne vairāk kā 20 faili vienā ziņojumā, ar iekļautajiem failiem kopā līdz 5 MB pēc atkodēšanas, skaitot katram ziņojumam, nevis visai partijai. `content` tīklā ir base64; padodiet baitus, un klients tos iekodē, un tā ir tā vienīgā vieta, kur pašrocīgi rakstīts base64 uzticami pārpilda izsaukumu steku. Ieraksts `{ fileId }` nosauc failu, kas jau ir darbvietā, un netiek ieskaitīts iekļauto failu ierobežojumā.
emails[].threadIdstring
Atbilde esošā pavedienā, ne vairāk kā 256 rakstzīmes. Transports no tā uzraksta In-Reply-To un References, un tieši tas liek atbildei nonākt sarunā, nevis blakus tai.
emails[].draftIdstring
Nosūtiet saglabāta melnraksta saturu ar šo aploksni, ne vairāk kā 256 rakstzīmes. Tīklā aiziet šeit izveidotie adresāti, temats un galvenes.
emails[].template{ id, version?, props?, slots? }
Atveido saglabātu veidni servera pusē pēc id (`tpl_…`) vai slug, ar `version`, kas piesaista revīziju, un `props`/`slots`, kas to aizpilda. Atrisināts vienreiz, kad ieraksts tiek pieņemts, un atteikts līdzās `html`/`text` un līdzās `draftId`, jo katrs no tiem ir otra atbilde uz jautājumu, ko ziņojums satur.
emails[].scheduledAtDate | string
`Date`, ISO-8601 brīdis vai ilgums, piemēram, `PT1H`; vismaz sekundi nākotnē un ne vairāk kā 365 dienas uz priekšu. Ieraksti tiek plānoti neatkarīgi, tāpēc viena partija var saturēt simts dažādus sūtīšanas laikus.
emails[].cancellableForSecondsnumber
Atsaukšanas logs sekundēs tūlītējam sūtījumam, vesels skaitlis no 0 līdz 900, pēc noklusējuma 0. Jebkas virs 0 tajā pašā ierakstā tiek atteikts līdzās `scheduledAt`, jo plānotu ziņojumu jau tāpat var atcelt, līdz tas aiziet.
emails[].trackingTrackingRequest
`opens` un `clicks`, katrs neatkarīgi neobligāts un katrs pārraksta iestatījumu tikai šim ziņojumam. Slēdzis, ko izlaižat, atgriežas pie tās adreses iestatījuma, no kuras ziņojums tiek sūtīts, vai pretējā gadījumā pie iestatījuma Visām adresēm, kas ir ieslēgts, ja vien kāds no tiem to nav izslēdzis.
emails[].tagsRecord<string, string>
Ne vairāk kā 10 birkas, ar atslēgām no 1 līdz 64 rakstzīmēm no `A-Za-z0-9_-` un vērtībām līdz 256. Atspoguļotas atpakaļ ziņojumā un nekad netiek interpretētas: `emails.list` pieņem `status`, `from`, `limit` un `cursor` un neko citu, tāpēc birka ir kaut kas nolasāms no ziņojuma, kas jums jau ir, nevis veids, kā to atrast.
emails[].translateSendTranslateOptions
Sūtiet šo ierakstu citā valodā, atrisinot to pieņemšanas brīdī, lai aizietu tieši tie vārdi, kas tika apstiprināti. Ne vairāk kā 10 ierakstu vienā partijā drīkst to nest: katrs iztērē vairākus modeļa izsaukumus, un ieraksti tiek apstrādāti pēc kārtas, tāpēc lielāka partija tiktu pārtraukta sūtīšanas vidū. Virs tā viss izsaukums tiek atteikts kā `too_many_items` uz `emails`, pirms kaut kas ir nosūtīts.

Atbilde: BatchResultResource

itemsBatchItemResource[]
Viens ieraksts katrai ievadei tādā secībā, kādā tos nosūtījāt. Nekas netiek atritināts atpakaļ, tāpēc šis ir pieraksts par to, kas notika ar katru ziņojumu, nevis atskaite par transakciju. API atbild ar 207 neatkarīgi no tā, vai pieņemti visi ziņojumi, daži vai neviens, tāpēc solījums atrisinās jebkurā gadījumā, un zarot vajag pēc katra ieraksta `status`.
sentnumber
Cik ierakstu tika PIEŅEMTI, kas nav tas pats, cik aizgāja. Ieraksts var būt `ok` un tomēr nest `email.status` ar vērtību `failed` vai `partial`, jo transports, kas ziņojumu atsaka pēc tam, kad rinda jau pastāv, ir piegādes iznākums, nevis noraidīts pieprasījums.
failednumber
Cik ierakstu nes `error`. `failed > 0` ir saraksts, ar ko rīkoties, nevis iemesls sūtīt partiju no jauna. Pieņemtie ziņojumi jau ir aizgājuši.
items[].indexnumber
Pozīcija, kāda šī ieraksta ziņojumam bija jūsu nosūtītajā masīvā. Nests gan kā lauks, gan kā secība, tāpēc kods, kas `items` filtrē vai kārto, joprojām var pateikt, kura ievade neizdevās.
items[].status'ok' | 'error'
Savienības diskriminants: `ok` nes `email`, `error` nes `error`, un neviens ieraksts nenes abus.
items[].emailSentEmailResource
Pieņemtais ziņojums, tikai `ok` ierakstā, tādā pašā formā, kādu atgriež atsevišķs sūtījums. Tas nenes `tracking` atslēgu, jo par iesaisti tiek ziņots vēlāk un pieņemšanas brīdī nav ko ziņot.
items[].email.replayedboolean
True, kad atvasinātā `Idempotency-Key` sakrita ar jau esošu sūtījumu, tāpēc nekas jauns netika nosūtīts un šis ir sākotnējais ziņojums.
items[].error{ type: string; code: string; message: string; param?: string }
Kāpēc tieši šis viens ziņojums tika atteikts, tikai `error` ierakstā. Tā ir API kļūdas aploksne bez `docUrl` un `requestId`: tie apraksta pieprasījumu, bet pieprasījums kopumā izdevās.
items[].error.typestring
Kategorija, pēc kuras klients drīkst zarot: `validation_error`, `permission_error`, `not_found_error`, `conflict_error` un pārējās. Kopa ir iesaldēta un nepaplašināsies, atšķirībā no `code`.
items[].error.codestring
Konkrētā kļūme: `from_address_forbidden`, `invalid_email_address`, `too_many_recipients`, `reserved_header`, `message_too_large`, `unknown_parameter`. Atvērta un papildināma kopa, tāpēc kodu, kuru neatpazīstat, apstrādājiet pēc tā `type`.
items[].error.messagestring
Viens teikums, rakstīts cilvēkam, kas nosauc problemātisko vērtību, ja tāda ir. Nav stabils identifikators. Zarojiet pēc `code`.
items[].error.paramstring
Lauks, kas tika atteikts, kā ar punktiem atdalīts ceļš ŠAJĀ ziņojumā: `to.0`, `from`, `attachments`. Nav klāt, kad kļūme nenosauc nevienu lauku, un nekad nav ar partijas pozīcijas prefiksu — tam ir `index`.