SDK
Programar y cancelar
`scheduledAt`, `emails.reschedule` y `emails.cancel`.
Enviar más tarde
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 instante ISO-8601 o una duración como PT1H / P2D. Hasta un año por delante, nunca en el pasado.
Mover y detener
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)Solo se pueden detener los mensajes en queued y scheduled; cualquier cosa más avanzada es un conflict_error, porque parte del mensaje ya está en el buzón de alguien. Cancelar un mensaje ya cancelado tiene éxito y no cambia nada.
Una ventana de deshacer en su lugar
await openemail.emails.send({ ...message, cancellableForSeconds: 30 })Un mensaje programado ya se puede cancelar hasta que sale, así que no se pueden combinar ambos y el servidor lo rechaza. Usa este para una ventana de deshacer el envío en un mensaje inmediato.
Parámetros: programación
scheduledAtDate | string- Cuándo enviar, en `emails.send`: un `Date`, un instante ISO-8601 o una duración como `PT1H` o `P2D`, que el cliente convierte a una cadena para la red. Al menos un segundo en el futuro y como máximo 365 días por delante; superar cualquiera de los dos límites es un `validation_error` en `scheduledAt`. No se acepta lenguaje natural, porque interpretar mal «el próximo martes» envía un mensaje a una hora que ya no se puede retirar.
cancellableForSecondsnumber- Una ventana de deshacer el envío en un envío INMEDIATO: un integer de 0 a 900, con 0 por defecto. Cualquier valor superior a 0 se rechaza junto con `scheduledAt`, que ya se puede cancelar hasta que sale, y un mensaje retenido de este modo queda en `queued` y no en `scheduled`. Es el mismo mecanismo de aplazamiento con un retraso corto.
idstringobligatorio- El id `msg_…`, y el primer argumento tanto de `emails.cancel` como de `emails.reschedule`. Ambos necesitan `emails:send` en lugar de un scope propio, y ambos se resuelven dentro del espacio de trabajo de la propia clave, así que un id que pertenece a otro es un `not_found_error` exactamente igual que un id que nunca existió.
reschedule.scheduledAtDate | stringobligatorio- La nueva hora, como segundo argumento de `emails.reschedule`, analizada con las mismas reglas y contra la misma ventana de un año, y lo único que cambiará el `PATCH /emails/{id}` subyacente. Una duración es relativa al momento en que la lee el SERVIDOR, así que una reprogramación reintentada cae algo más tarde de lo que habría caído la primera: más tarde, nunca antes.
Respuesta: EmailResource
object'email'- Siempre `email`. Ambas llamadas responden con el mensaje completo en lugar de con un acuse de recibo, así que no hay que volver a pedir nada para ver qué cambió; `emails.send` devuelve esta misma forma más `replayed`.
idstring- El identificador `msg_…`. Estable durante toda la vida del mensaje y el id que aceptan todas las demás llamadas sobre él.
statusEmailStatus- `cancelled` tras una cancelación y `scheduled` tras una reprogramación, incluso para un mensaje que solo estaba en `queued` detrás de una ventana de deshacer, que una reprogramación convierte en una programación real. Solo se pueden mover o detener los mensajes en `queued` y `scheduled`; cualquier cosa más avanzada es un `conflict_error` con el código `email_not_cancellable`, porque parte del mensaje ya está en el buzón de alguien.
scheduledAtstring | null- El instante ISO en que está previsto despachar el mensaje. Se establece tanto para una ventana de deshacer como para un envío con `scheduledAt`, ya que ambos son un mismo mecanismo, y es null en un envío inmediato normal.
cancellableUntilstring | null- Cuándo deja de funcionar la cancelación, que es el mismo instante que `scheduledAt` en ambas rutas aplazadas. Null en un envío inmediato, que ya ha salido cuando la llamada retorna.
sentAtstring | null- Cuándo salió realmente el mensaje. Null mientras espera, y null para siempre en uno cancelado.
messageIdstring | null- El Message-ID de RFC 5322, null hasta que existe el MIME, así que siempre null en un mensaje sobre el que pueden actuar estas dos llamadas. No es algo con lo que dirigirse a la API, ni tampoco aquello con lo que vuelve un rebote posterior: el servicio de envío reescribe la cabecera a la salida.
threadIdstring | null- El hilo al que pertenece este mensaje, tomado de la solicitud y reescrito con lo que informe el transporte una vez enviado. Null cuando no es una respuesta.
transportEmailTransport | (string & {}) | null- Cómo salieron los bytes, y null hasta el despacho, así que null en todo mensaje que puedan devolver una cancelación o una reprogramación. Un envío en modo de prueba registra `test`, y la unión se mantiene abierta para que un transporte que este SDK aún no nombra no sea un cambio incompatible.
attemptsnumber- Cuántas veces el despacho ha reclamado esta fila. Lo incrementa la reclamación y no un envío correcto, y es 0 para todo lo que sigue esperando.
lastErrorstring | null- El último fallo registrado contra el mensaje, null mientras no haya fallado nada. Un envío aplazado cuyo trabajo no se pudo encolar se escribe aquí como `Could not schedule: …` y pasa a `failed`, que es la única forma en que un mensaje programado deja de poder cancelarse sin que nadie lo pida.
fromstring- La dirección con la que se autorizó que saliera el mensaje, almacenada escueta y en minúsculas. No siempre es la dirección que se pidió (una clave restringida que no nombra ningún `from` se resuelve a la primera dirección que puede usar), y aquí se descarta cualquier nombre visible, porque el filtro `from` de `emails.list` compara por igualdad.