Agendar e cancelar
`scheduledAt`, `emails.reschedule` e `emails.cancel`.
Enviar mais tarde
from datetime import datetime, timezone from openemail import openemailfrom openemail.types import EmailSend message: EmailSend = {'from': sender, 'to': recipient, 'subject': subject, 'text': text} openemail.emails.send({**message, 'scheduledAt': 'PT1H'})openemail.emails.send({**message, 'scheduledAt': datetime(2027, 1, 1, 9, 0, tzinfo=timezone.utc)})openemail.emails.send({**message, 'scheduledAt': '2027-01-01T09:00:00.000Z'})Um datetime, um instante ISO-8601 ou uma duração como PT1H / P2D. Até um ano à frente, nunca no passado.
Um datetime é enviado em UTC, e um sem fuso horário é primeiro lido como a hora local desta máquina, tal como astimezone o lê, por isso passe um com fuso horário quando o fuso importar. Um timedelta não é aceite: some-o a datetime.now(timezone.utc) ou envie uma duração como PT1H.
Mover e interromper
from datetime import datetime, timedelta, timezone from openemail import openemailfrom openemail.types import EmailSend message: EmailSend = {'from': sender, 'to': recipient, 'subject': subject, 'text': text} queued = openemail.emails.send({**message, 'scheduledAt': 'PT1H'}) openemail.emails.reschedule(queued['id'], datetime.now(timezone.utc) + timedelta(days=1))openemail.emails.cancel(queued['id'])Só as mensagens queued e scheduled podem ser interrompidas; qualquer uma mais avançada dá conflict_error, porque parte dela já está na caixa de correio de alguém. Cancelar uma mensagem já cancelada é bem-sucedido e não altera nada.
Em alternativa, uma janela para anular
from openemail import openemailfrom openemail.types import EmailSend message: EmailSend = {'from': sender, 'to': recipient, 'subject': subject, 'text': text} openemail.emails.send({**message, 'cancellableForSeconds': 30})Uma mensagem agendada já pode ser cancelada até sair, pelo que as duas opções não podem ser combinadas e o servidor recusa-o. Use esta para uma janela de anulação do envio numa mensagem imediata.
Parâmetros: agendamento
scheduledAtdatetime | str- Quando enviar, em `emails.send`: um `datetime`, um instante ISO-8601 ou uma duração como `PT1H` ou `P2D`, que o cliente converte numa string para envio. Pelo menos um segundo no futuro e no máximo 365 dias à frente, sendo a violação de qualquer um dos limites um `validation_error` em `scheduledAt`, e não é aceite linguagem natural, porque interpretar mal "próxima terça-feira" envia uma mensagem num momento que não pode ser desfeito.
cancellableForSecondsint- Uma janela de anulação do envio num envio IMEDIATO: um inteiro de 0 a 900, com 0 por predefinição. Qualquer valor acima de 0 é recusado em conjunto com `scheduledAt`, que já pode ser cancelado até sair, e uma mensagem retida desta forma fica em `queued` e não em `scheduled`. É o mesmo mecanismo de diferimento com um atraso curto.
idstrobrigatório- O id `msg_…`, e o primeiro argumento tanto de `emails.cancel` como de `emails.reschedule`. Ambos exigem `emails:send` e não um âmbito próprio, e ambos são resolvidos dentro do espaço de trabalho da própria chave, pelo que um id que pertença a outro dá `not_found_error`, exatamente como um id que nunca existiu.
scheduled_atdatetime | strobrigatório- A nova hora, como segundo argumento de `emails.reschedule`, interpretada pelas mesmas regras e dentro da mesma janela de um ano, e a única coisa que o `PATCH /emails/{id}` subjacente vai alterar. Uma duração é relativa ao momento em que o SERVIDOR a lê, pelo que um reagendamento repetido fica ligeiramente mais tarde do que o primeiro teria ficado: mais tarde, nunca mais cedo.
Resposta: EmailResource
objectLiteral['email']- Sempre `email`. Ambas as chamadas respondem com a mensagem completa e não com uma confirmação, pelo que não é preciso voltar a obter nada para ver o que mudou; `emails.send` devolve esta mesma forma mais `replayed`.
idstr- O identificador `msg_…`. Estável durante toda a vida da mensagem e o id que todas as outras chamadas sobre ela recebem.
statusEmailStatus- `cancelled` após um cancelamento e `scheduled` após um reagendamento, incluindo numa mensagem que estava apenas `queued` atrás de uma janela para anular, que um reagendamento transforma num agendamento real. Só as mensagens `queued` e `scheduled` podem ser movidas ou interrompidas; qualquer uma mais avançada dá `conflict_error` com o código `email_not_cancellable`, porque parte dela já está na caixa de correio de alguém.
scheduledAtstr | None- O instante ISO em que a mensagem deve ser despachada. Definido tanto para uma janela para anular como para um envio com `scheduledAt`, já que os dois são um único mecanismo, e null num envio imediato simples.
cancellableUntilstr | None- Quando o cancelamento deixa de funcionar, que é o mesmo instante que `scheduledAt` em ambos os percursos diferidos. É null num envio imediato, que já saiu quando a chamada retorna.
sentAtstr | None- Quando a mensagem saiu efetivamente. É null enquanto espera, e null para sempre numa mensagem cancelada.
messageIdstr | None- O Message-ID do RFC 5322, null até o MIME existir, pelo que é sempre null numa mensagem sobre a qual estas duas chamadas podem agir. Não serve para referenciar a mensagem na API, nem é aquilo com que uma devolução posterior regressa: o serviço de envio reescreve o cabeçalho à saída.
threadIdstr | None- A conversa a que esta mensagem pertence, retirada do pedido e reescrita com o que o transporte reportar depois de enviar. É null quando não é uma resposta.
transportEmailTransport | str | None- Como os bytes saíram, e null até ao despacho, pelo que é null em todas as mensagens que um cancelamento ou um reagendamento podem devolver. Um envio em modo de teste regista `test`, e a união permanece aberta para que um transporte que este SDK ainda não nomeia não seja uma alteração incompatível.
attemptsint- Quantas vezes o despacho reservou esta linha. É incrementado pela reserva e não por um envio bem-sucedido, e é 0 para tudo o que ainda está à espera.
lastErrorstr | None- A última falha registada na mensagem, null enquanto nada tiver falhado. Um envio diferido cuja tarefa não pôde ser colocada em fila é registado aqui como `Could not schedule: …` e passa a `failed`, que é a única forma de uma mensagem agendada deixar de poder ser cancelada sem que ninguém o peça.
fromstr- O endereço com que a mensagem foi autorizada a sair: o `from` que foi enviado, guardado simples e em minúsculas. Qualquer nome de apresentação é descartado aqui, porque o filtro `from_` de `emails.list` compara por igualdade.