Saltar para a documentação
Base de conhecimento

Mudar do Postmark

Mantenha a biblioteca do Postmark e envie através do OpenEmail. Altere o host e o token de servidor, e o seu código de envio fica como está.

O que mudar

Aponte a biblioteca para https://api.openemail.uk/compat/postmark e coloque, onde vai o token de servidor, uma chave de API do OpenEmail com a permissão emails:send. Ela segue no mesmo cabeçalho X-Postmark-Server-Token. As suas chamadas que enviam correio ficam como estão, e o endereço From decide se uma mensagem pode sair, como em todo o OpenEmail.

import { ServerClient } from 'postmark' const client = new ServerClient(process.env.OPENEMAIL_API_KEY, {  requestHost: 'api.openemail.uk/compat/postmark',}) await client.sendEmail({  From: '[email protected]',  To: '[email protected]',  Subject: 'Your invoice',  HtmlBody: '<p>Your invoice is attached.</p>',  MessageStream: 'outbound',})

Em Node, requestHost é o host e o caminho juntos, sem esquema e sem barra final. Em Ruby, path_prefix precisa de uma barra em cada ponta. Em Python, use o pacote oficial postmark-python com base_url. O pacote comunitário postmarker não consegue chegar a um caminho abaixo de um host, por isso não funciona aqui. Em PHP, PostmarkClient::$BASE_URL leva o esquema, o host e o caminho, sem barra final. É estático, por isso aplica-se a todos os clientes Postmark do processo, incluindo o PostmarkAdminClient.

O que corresponde a quê

Os endpoints servidos são POST /email, /email/batch, /email/withTemplate e /email/batchWithTemplates. Os nomes dos campos correspondem com qualquer combinação de maiúsculas e minúsculas, como no Postmark, e uma cadeia vazia conta como omitida.

PostmarkNo OpenEmail
FromO remetente, com o seu nome.
ToDestinatários separados por vírgulas. Com Cc e Bcc, até 50 por mensagem.
ReplyToUm único endereço de resposta.
SubjectO assunto.
HtmlBodyO corpo HTML. TextBody torna-se o corpo de texto, e um dos dois é obrigatório.
HeadersCabeçalhos próprios dados como Name e Value: X-*, List-*, Reply-To, Precedence, Auto-Submitted, Importance, Priority e Feedback-ID.
AttachmentsFicheiros, no máximo 20 e 5 MB no total. Uma imagem cujo ContentID o HTML usa como cid: é embutida onde aparece. Qualquer outro ficheiro chega como anexo normal.
TagUma etiqueta chamada tag.
MetadataEtiquetas com os mesmos nomes e valores. Com Tag, no máximo 10 por mensagem.
TrackOpensLiga ou desliga o rastreio de aberturas da mensagem.
MessageStreamoutbound, ou o id de qualquer outro fluxo transacional, envia a mensagem como de costume.
TemplateAliasO slug ou o id (tpl_...) de um modelo do OpenEmail, preenchido a partir de TemplateModel. InlineCss é aceite e não muda nada.

O que é recusado, e porquê

  • TemplateId, com o ErrorCode 1101. Um id de modelo do Postmark não significa nada aqui, por isso recrie o modelo no OpenEmail e envie o seu slug ou id como TemplateAlias.
  • O fluxo broadcast, com o ErrorCode 1236. Estes endpoints enviam correio transacional, e as newsletters saem como difusões do OpenEmail.
  • Subject, HtmlBody ou TextBody numa mensagem com modelo, com o ErrorCode 1123, porque o modelo os fornece. TrackLinks com o valor TextOnly, porque o OpenEmail rastreia as ligações da parte HTML.
  • Mais de um endereço de resposta, um cabeçalho repetido ou fora da lista acima, mais de 10 etiquetas, e um nome de etiqueta ou de Metadata com algo além de letras, algarismos, _ e -.
  • Um lote de mais de 100 mensagens, com o ErrorCode 410. O Postmark aceita 500, por isso divida os lotes maiores.

Respostas e erros

  • Um envio responde 200 com To, SubmittedAt, MessageID, ErrorCode a 0 e Message a OK. MessageID é o id da mensagem do OpenEmail, o que GET /emails/{id} e os webhooks usam. Um cabeçalho Idempotency-Key funciona como no resto da API.
  • Um lote responde 200 com um resultado por mensagem, pela mesma ordem. Uma mensagem que falhou leva apenas o seu ErrorCode e a sua Message, e as outras saem na mesma.
  • Os erros chegam como ErrorCode e Message. Uma chave em falta ou desconhecida, ou uma sem emails:send, responde HTTP 401 com o ErrorCode 10. O resto responde HTTP 422: ErrorCode 300 para a própria mensagem, 400 para um endereço From que a chave não pode usar, 401 para um domínio que ainda não pode enviar, 402 para um corpo que não é JSON e 405 para um espaço de trabalho que esgotou a sua quota de envio. HTTP 413 significa que o corpo ultrapassa 10 MB, ou 50 MB num lote, ou que os anexos ultrapassam 5 MB.