Repository navigation
email verificacao
Home > E-mail > Verificar o que chega
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Nível: avançado
Em uma frase: TRALMailVerifier diz se uma mensagem recebida pelo seu
servidor SMTP veio mesmo de quem diz: SPF (o endereço que enviou pode
enviar por aquele domínio?), DKIM (a assinatura confere?) e DMARC (a política do domínio
do remetente), com o cabeçalho Authentication-Results pronto.
Você vai precisar: o pacote RALModuleMailPackage (e-mail) e acesso a um
servidor DNS (o do sistema serve).
uses RALSMTPServer, RALMailVerifier;
FVerificador := TRALMailVerifier.Create(Self);
FVerificador.AuthServId := 'mx.minhaempresa.com.br';
procedure TForm1.MensagemChegou(Sender: TObject; ASession: TRALSMTPSession;
AEnvelope: TRALSMTPEnvelope; AData: TStream; var ACode: IntegerRAL;
var AReply: StringRAL);
var
vRes: TRALMailVerifyResult;
begin
vRes := TRALMailVerifyResult.Create;
try
FVerificador.VerifyMessage(ASession, AEnvelope, AData, vRes);
if vRes.ShouldReject then
begin
ACode := 550;
AReply := '5.7.1 rejected by DMARC policy';
Exit;
end;
// vRes.AuthenticationResults vai na frente da mensagem gravada
Gravar(vRes.AuthenticationResults, AData);
finally
vRes.Free;
end;
end;-
SPF:pass,fail,softfail,neutral,none,temperror,permerror(RFC 7208, com o limite de 10 consultas de DNS). -
DKIM: o resultado de cada assinatura (domínio, seletor, veredito). -
DMARC: o domínio doFromalinhado ao do SPF ou do DKIM aprovado, e a política publicada (DMARCPolicy,DMARCDisposition);ShouldRejecté verdadeiro quando a política manda rejeitar e a mensagem falhou. -
Verify(IP, HELO, MAIL FROM, dados, resultado)faz o mesmo fora do servidor SMTP.
O verificador usa um TRALDNSResolver próprio (UDP, com TCP quando a resposta não
cabe, cache pelo TTL). Sem nada configurado, usa os servidores do sistema
(/etc/resolv.conf no Linux, a configuração de rede no Windows). Para usar outros,
ligue um TRALDNSResolver em Resolver e preencha Servers.
O "domínio organizacional" do DMARC (o minhaempresa.com.br de
vendas.minhaempresa.com.br) sai de uma lista dos sufixos comuns (.com.br, .co.uk
e outros); se o seu caso não estiver nela, responda OnOrganizationalDomain.
| sintoma | causa | o que fazer |
|---|---|---|
tudo temperror
|
o DNS não responde | confira Servers ou a rede |
spf=softfail de um parceiro conhecido |
o SPF dele não lista o servidor que enviou | é dele corrigir; não rejeite por softfail
|
DMARC fail com DKIM pass
|
a assinatura é de outro domínio (um serviço de envio) | normal; o remetente precisa assinar com o domínio do From
|
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Serviços (contêiner de dependências) 🚧
- Barramento de eventos 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- JSON-RPC 2.0 🚧
- Servidor MCP (IA) 🚧
-
Protocol Buffers 🚧
- gRPC 🚧
- WebSocket 🚧
- Hubs (WebSocket) 🚧
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
E-mail 🚧
- Mensagens 🚧
- Enviar 🚧
- Receber 🚧
- Ler a caixa postal 🚧
- Verificar o que chega 🚧
- Servir caixas postais 🚧
- S/MIME 🚧
- OpenPGP 🚧
Chatbot 🚧
- O robô e os canais 🚧
- Telegram 🚧
- Gateways REST (WhatsApp não oficial) 🚧
- Discord 🚧
- Slack 🚧
- Microsoft Teams 🚧
- Conversa em etapas 🚧
Cliente
Motores
- Qual motor escolher?
- Compatibilidade
- Recursos
- QUIC
- Motor NgHttp2 (HTTP/2) 🚧
- Motor XSocket 🚧
- Motor AdvancedHTTP (experimental) 🚧
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar