SDK
Sūtīt partiju
`emails.sendBatch`: līdz 100 ziņojumiem, rezultāti katram atsevišķi.
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 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`.