Ves a la documentació
SDK

Programa i cancel·la

`scheduledAt`, `emails.reschedule` i `emails.cancel`.

Enviar més tard

schedule.ts
await openemail.emails.send({ ...message, scheduledAt: 'PT1H' })await openemail.emails.send({ ...message, scheduledAt: new Date('2027-01-01T09:00:00Z') })await openemail.emails.send({ ...message, scheduledAt: '2027-01-01T09:00:00.000Z' })

Un Date, un instant ISO-8601 o una durada com ara PT1H / P2D. Fins a un any endavant, mai en el passat.

Moure i aturar

reschedule.ts
const queued = await openemail.emails.send({ ...message, scheduledAt: 'PT1H' }) await openemail.emails.reschedule(queued.id, new Date(Date.now() + 86_400_000))await openemail.emails.cancel(queued.id)

Només es poden aturar els missatges queued i scheduled; qualsevol cosa més avançada és un conflict_error, perquè una part ja és a la bústia d'algú. Cancel·lar un missatge ja cancel·lat reïx i no canvia res.

Una finestra per desfer, en lloc d'això

undo-window.ts
await openemail.emails.send({ ...message, cancellableForSeconds: 30 })

Un missatge programat ja es pot cancel·lar fins que surt, de manera que els dos no es poden combinar i el servidor ho rebutja. Fes servir aquest per tenir una finestra per desfer l'enviament en un missatge immediat.

Paràmetres: programació

scheduledAtDate | string
Quan s'ha d'enviar, a `emails.send`: un `Date`, un instant ISO-8601 o una durada com ara `PT1H` o `P2D`, que el client converteix en una cadena per al cable. Com a mínim un segon en el futur i com a màxim d'aquí a 365 dies, i qualsevol dels dos límits és un `validation_error` a `scheduledAt`; el llenguatge natural no s'accepta, perquè interpretar malament «el dimarts vinent» envia un missatge en un moment que ja no es pot desfer.
cancellableForSecondsnumber
Una finestra per desfer l'enviament en un enviament IMMEDIAT: un integer de 0 a 900, amb 0 per defecte. Qualsevol valor superior a 0 es rebutja al costat de `scheduledAt`, que ja es pot cancel·lar fins que surt, i un missatge retingut així es queda a `queued` i no pas a `scheduled`. És el mateix mecanisme d'ajornament amb un retard curt.
idstringobligatori
L'id `msg_…`, i el primer argument tant d'`emails.cancel` com d'`emails.reschedule`. Tots dos necessiten `emails:send` i no pas un scope propi, i tots dos es resolen dins de l'espai de treball de la mateixa clau, de manera que un id que pertany a un altre és un `not_found_error` exactament igual que un id que no ha existit mai.
reschedule.scheduledAtDate | stringobligatori
La nova hora, com a segon argument d'`emails.reschedule`, interpretada amb les mateixes regles i contra la mateixa finestra d'un any, i l'única cosa que canviarà el `PATCH /emails/{id}` subjacent. Una durada és relativa al moment en què la llegeix el SERVIDOR, de manera que una reprogramació reintentada cau una mica més tard del que hauria caigut la primera: més tard, mai abans.

Resposta: EmailResource

object'email'
Sempre `email`. Totes dues crides responen amb el missatge sencer i no pas amb una confirmació, de manera que no cal tornar a baixar res per veure què ha canviat; `emails.send` retorna aquesta mateixa forma més `replayed`.
idstring
L'identificador `msg_…`. Estable durant tota la vida del missatge i l'id que accepten totes les altres crides sobre ell.
statusEmailStatus
`cancelled` després d'una cancel·lació i `scheduled` després d'una reprogramació, fins i tot per a un missatge que només estava `queued` darrere d'una finestra per desfer, que una reprogramació converteix en una programació real. Només es poden moure o aturar els missatges `queued` i `scheduled`; qualsevol cosa més avançada és un `conflict_error` amb el codi `email_not_cancellable`, perquè una part ja és a la bústia d'algú.
scheduledAtstring | null
L'instant ISO en què s'ha de trametre el missatge. Es defineix tant per a una finestra per desfer com per a un enviament amb `scheduledAt`, ja que tots dos són un mateix mecanisme, i és null en un enviament immediat normal.
cancellableUntilstring | null
Quan la cancel·lació deixa de funcionar, que és el mateix instant que `scheduledAt` en tots dos camins ajornats. Null en un enviament immediat, que ja ha sortit quan la crida retorna.
sentAtstring | null
Quan va sortir realment el missatge. Null mentre espera, i null per sempre en un de cancel·lat.
messageIdstring | null
El Message-ID de l'RFC 5322, null fins que existeix el MIME, de manera que sempre és null en un missatge sobre el qual aquestes dues crides poden actuar. No és una cosa amb què adreçar-se a l'API, ni és tampoc allò amb què torna un rebot posterior: el servei d'enviament reescriu la capçalera a la sortida.
threadIdstring | null
La conversa a la qual pertany aquest missatge, presa de la sol·licitud i reescrita amb el que informi el transport un cop l'envia. Null quan no és una resposta.
transportEmailTransport | (string & {}) | null
Com han sortit els bytes, i null fins a la tramesa, de manera que és null a tots els missatges que poden retornar una cancel·lació o una reprogramació. Un enviament en mode de prova registra `test`, i la unió es manté oberta perquè un transport que aquest SDK encara no anomena no sigui un canvi trencador.
attemptsnumber
Quantes vegades la tramesa ha reclamat aquesta fila. S'incrementa amb la reclamació i no pas amb un enviament reeixit, i és 0 per a tot allò que encara espera.
lastErrorstring | null
L'última fallada registrada sobre el missatge, null mentre no hagi fallat res. Un enviament ajornat la feina del qual no s'ha pogut encuar s'escriu aquí com a `Could not schedule: …` i passa a `failed`, que és l'única manera que un missatge programat deixi de ser cancel·lable sense que ningú ho hagi demanat.
fromstring
L'adreça amb què es va autoritzar que sortís el missatge, desada nua i en minúscules. No sempre és l'adreça que es va demanar (una clau acotada que no anomena cap `from` es resol a la primera adreça que pot fer servir), i aquí es descarta qualsevol nom visible, perquè el filtre `from` d'`emails.list` compara per igualtat.