Enviar e-mail por SMTP

Aponte qualquer app que use SMTP para o Banger, de Supabase Auth a WordPress e ao mailer do seu framework. Uma chave de API do Banger é a senha, e cada mensagem é entregue do seu domínio e aparece em Logs.

Configurações

Hostsubmit.bangermail.com
Porta465 com TLS desde o início, ou 587 com STARTTLS. Se sua rede bloquear esses, use 2465 (TLS) ou 2587 (STARTTLS); a porta 25 também aceita STARTTLS.
Nome de usuáriobanger. Qualquer valor funciona: só a chave de API identifica seu espaço de trabalho.
SenhaUma chave de API do Banger com o escopo mail:send.
CriptografiaTLS 1.2 ou mais recente. O login só é oferecido após iniciar TLS, então uma chave nunca atravessa a rede em texto simples.
AutenticaçãoPLAIN ou LOGIN.

Antes de começar

  1. Crie uma chave de API. Em o app do Banger, abra Configurações → Desenvolvedores → Gerenciar chaves de API, escolha Criar chave de API, selecione mail:send e copie a chave: ela aparece uma única vez. A página mostra essas configurações SMTP ao lado das chaves.
  2. Envie de um canal de Produto. O endereço From deve estar em um hostname com canal de Produto ativo, o canal para recibos, alertas e outros e-mails do seu app. Em Domínios, escolha Adicionar canal, depois Produto, e adicione os registros DNS listados. Um canal de E-mail (as caixas da equipe) ou de Disparo não transporta e-mail de app, então o e-mail do seu app não pode afetar a reputação da caixa de entrada da equipe.

Exemplo: Supabase Auth

No seu projeto Supabase, abra Authentication → Emails → SMTP Settings e ative SMTP personalizado:

E-mail do remetenteUm endereço no seu canal de Produto, como noreply@app.example.com
Nome do remetenteO nome do seu produto. O Banger o entrega como escrito.
Hostsubmit.bangermail.com
Porta465
Nome de usuáriobanger
SenhaSua chave de API

Salve, depois envie um link mágico de Authentication → Users para verificar se chega.

Exemplo: Node.js

import nodemailer from "nodemailer";

const transport = nodemailer.createTransport({
  host: "submit.bangermail.com",
  port: 465,
  secure: true,
  auth: { user: "banger", pass: process.env.BANGER_API_KEY },
});

await transport.sendMail({
  from: "Acme <noreply@app.example.com>",
  to: "person@example.com",
  subject: "Your receipt",
  html: "<p>Thanks for your order.</p>",
});

Para testar de um terminal com swaks:

swaks --server submit.bangermail.com:465 --tls-on-connect \
  --auth PLAIN --auth-user banger --auth-password "$BANGER_API_KEY" \
  --from noreply@app.example.com --to you@example.com

O que acontece com cada mensagem

  • O Banger entrega a mensagem como seu app a escreveu, com seu nome From, assinada com a chave DKIM do seu domínio e enviada pelo domínio de retorno do seu canal de Produto.
  • Remove Bcc, Return-Path e os cabeçalhos próprios do Banger, e adiciona Reply-To indicando o endereço From quando não existe.
  • Cada destinatário é verificado em RCPT TO: um endereço suprimido é recusado individualmente e os outros recebem.
  • Uma mensagem pode ter até 10 MiB e até 50 destinatários.
  • Um cabeçalho Idempotency-Key torna uma nova tentativa o mesmo envio. Sem ele, uma repetição da mesma mensagem e destinatários ainda é reconhecida.
  • Cada mensagem aparece em Logs com SMTP como fonte e conta no seu plano como qualquer outro envio.

Respostas e erros

Uma recusa informa sua causa e traz uma referência, (ref …), que corresponde à entrada em Logs. Códigos que começam com 4 são temporários: seu app pode tentar novamente depois.

RespostaSignificado
535 5.7.8A senha não é uma chave de API válida do Banger, a chave foi revogada ou falta mail:send.
421 4.7.0Três logins falhos em uma conexão: ela fecha. Verifique a chave antes de tentar novamente.
454 4.7.0Muitos logins falhos da sua rede na última hora. Tente novamente depois.
550 5.7.1O hostname From não tem canal de Produto pronto para enviar (a resposta informa o que falta), um destinatário está suprimido ou o envio está pausado por reputação.
553 5.1.3Um endereço de destinatário não é válido.
552 5.3.4A mensagem é maior que 10 MiB.
554 5.6.0A mensagem está malformada, por exemplo um cabeçalho From ou Subject repetido, ou From com mais de um endereço.
451 4.7.0A cota de envio ou limite diário do espaço de trabalho acabou. Renova no próximo período de cobrança ou dia, ou agora com upgrade de plano.
451 4.3.0O Banger não pôde aceitar a mensagem agora. Tente novamente.

Segurança

  • O Banger armazena apenas um hash de cada chave. Revogue ou rotacione uma chave em Gerenciar chaves de API; clientes SMTP que a usam são recusados no próximo login.
  • Dê ao SMTP uma chave própria com apenas mail:send, para que uma senha vazada não possa ler seu espaço de trabalho.
  • Logins falhos são limitados por rede do cliente e por chave, e um login recusado com uma das suas chaves é registrado em Logs.

Prefere HTTP? O mesmo envio está disponível pela API do Banger.