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.
| Postmark | No OpenEmail |
|---|---|
| From | O remetente, com o seu nome. |
| To | Destinatários separados por vírgulas. Com Cc e Bcc, até 50 por mensagem. |
| ReplyTo | Um único endereço de resposta. |
| Subject | O assunto. |
| HtmlBody | O corpo HTML. TextBody torna-se o corpo de texto, e um dos dois é obrigatório. |
| Headers | Cabeçalhos próprios dados como Name e Value: X-*, List-*, Reply-To, Precedence, Auto-Submitted, Importance, Priority e Feedback-ID. |
| Attachments | Ficheiros, 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. |
| Tag | Uma etiqueta chamada tag. |
| Metadata | Etiquetas com os mesmos nomes e valores. Com Tag, no máximo 10 por mensagem. |
| TrackOpens | Liga ou desliga o rastreio de aberturas da mensagem. |
| TrackLinks | HtmlAndText e HtmlOnly ligam o rastreio de cliques, e None desliga-o. |
| MessageStream | outbound, ou o id de qualquer outro fluxo transacional, envia a mensagem como de costume. |
| TemplateAlias | O 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 comoTemplateAlias.- O fluxo
broadcast, com o ErrorCode 1236. Estes endpoints enviam correio transacional, e as newsletters saem como difusões do OpenEmail. Subject,HtmlBodyouTextBodynuma mensagem com modelo, com o ErrorCode 1123, porque o modelo os fornece.TrackLinkscom o valorTextOnly, 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
Metadatacom 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,ErrorCodea 0 eMessagea OK.MessageIDé o id da mensagem do OpenEmail, o queGET /emails/{id}e os webhooks usam. Um cabeçalhoIdempotency-Keyfunciona 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
ErrorCodee a suaMessage, e as outras saem na mesma. - Os erros chegam como
ErrorCodeeMessage. Uma chave em falta ou desconhecida, ou uma sememails: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.