O que é um endereço de devolução?
Um endereço de rejeição, também chamado de caminho de retorno ou remetente de envelope, é o endereço de e-mail que recebe relatórios de não entrega (NDRs) quando um e-mail não pode ser entregue. Este endereço é separado do endereço "De" visível para os destinatários e é usado exclusivamente para notificações de entrega automatizadas.
Como funcionam os endereços de devolução
A transmissão por e-mail utiliza dois conjuntos de endereços:
Cabeçalho De (visível para destinatário):From: John Doe <[email protected]>
Envelope From (SMTP-level, usado para saltos):
MAIL FROM: <[email protected]>
Quando a entrega falha, o servidor receptor envia o salto para o remetente do envelope, não o cabeçalho Do endereço.
Exemplo de conversação SMTP
Client: MAIL FROM: <[email protected]>
Server: 250 OK
Client: RCPT TO: <[email protected]>
Server: 550 No such user here
Client: QUIT
# Later, server sends bounce to [email protected]
Tipos de E-mail Bounces
Devoluções permanentes
Falhas permanentes de entrega:
- O utilizador não existe: 550 Não existe tal utilizador
- O domínio não existe: 550 Domínio não encontrado
- Rejeitado pela política: 550 Spam bloqueado
Devoluções temporárias
Falhas temporárias:
- Caixa de correio cheia: 452 Armazenamento insuficiente do sistema
- Server temporariamente indisponível: 421 Serviço não disponível
- Mensagem muito grande: 552 Tamanho da mensagem excede o limite
Devoluções por bloqueio
Problemas de entrega:
- IP lista negra: 554 Serviço indisponível; IP do remetente bloqueado
- Conteúdo filtrado como spam: 550 Pontuação de spam muito alta
- Limitação de valores: 450 Demasiados emails
Configuração de endereços de devolução
Definição do Return Path nos cabeçalhos de e-mail
PHP (função de correio):$to = "[email protected]";
$subject = "Test Email";
$message = "Email body";
$headers = "From: [email protected]\r\n";
$headers .= "Return-Path: [email protected]\r\n";
mail($to, $subject, $message, $headers, "-f [email protected]");
PHPMailer:
$mail = new PHPMailer();
$mail->From = "[email protected]";
$mail->Sender = "[email protected]"; // Return path
$mail->addAddress("[email protected]");
$mail->Subject = "Test Email";
$mail->send();
Postfix (SMTP):
# /etc/postfix/main.cf
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# /etc/postfix/sender_canonical
@example.com [email protected]
# Apply changes
postmap /etc/postfix/sender_canonical
systemctl reload postfix
Serviços dedicados de gerenciamento de devoluções
A maioria dos provedores de serviços de email oferecem gerenciamento de rejeição:
Amazon SES:{
"Message": {
"Subject": "Test",
"From": "[email protected]",
"ReturnPath": "[email protected]"
}
}
EnviarGrid:
const msg = {
to: '[email protected]',
from: '[email protected]',
replyTo: '[email protected]',
return_path: '[email protected]',
subject: 'Test Email',
text: 'Email body'
};
Convenções de nomenclatura para endereços de devolução
Abordagem com subdomínio
[email protected] # General bounces
[email protected] # No-reply emails
[email protected] # Returns/receipts
Específica para campanhas
Faixa de saltos por campanha:
[email protected]
Caminho de Retorno do Envelope Variável (VERP)
Codificar o destinatário no endereço de rejeição:
Sending to: [email protected]
Return path: [email protected]
When bounce arrives at bounces+*, parse to identify failed recipient
Processamento de mensagens de devolução
Análise automática de devoluções
Exemplo de Python:import email
from email import policy
def parse_bounce(raw_email):
msg = email.message_from_string(raw_email, policy=policy.default)
# Extract bounce type
if "550" in msg.get_payload():
return "hard_bounce"
elif "452" in msg.get_payload():
return "soft_bounce"
# Extract failed recipient
for part in msg.walk():
if part.get_content_type() == "message/delivery-status":
# Parse delivery status
pass
return bounce_info
# Integrate with mailing list to remove hard bounces
Gerenciamento de devoluções por webhook
ESPs modernos fornecem webhooks:
SendGrid Webhook:POST /bounce-webhook
{
"email": "[email protected]",
"event": "bounce",
"reason": "550 5.1.1 User unknown",
"type": "blocked",
"status": "5.0.0"
}
Acção: Atualizar o banco de dados para marcar o e- mail como rebatido.
SPF e endereços de devolução
O SPF verifica o remetente do envelope (endereço de salto), não o cabeçalho From:
Message:
From: [email protected] (header)
Return-Path: [email protected] (envelope)
SPF Check:
Queries: mail-server.com TXT record (not example.com)
Must include sending IP in mail-server.com's SPF
Configuração de SPF do domínio de devolução
bounces.example.com. IN TXT "v=spf1 include:_spf.sendgrid.net ~all"
Certifique-se de que seu subdomínio de salto tenha registros SPF apropriados para sua infraestrutura de envio.
Práticas recomendadas para endereços de devolução
Use um endereço de devolução dedicado
Nunca use seu e-mail primário para saltos:
# Bad
Return-Path: [email protected]
# Good
Return-Path: [email protected]
Monitore as taxas de devolução
| Taxa de Salto | Avaliação | Acção |
|---|---|---|
| < 2% | Saudável | Continuar o acompanhamento |
| 2-5% | Acerca | Qualidade da lista de e- mail de auditoria |
| 5-10% | Pobre | Limpeza imediata da lista necessária |
| > 10% | Crítico | Entregabilidade em risco |
Implemente o processamento de devoluções
Automatize a remoção de saltos rígidos:
-- Mark emails with hard bounces
UPDATE mailing_list
SET status = 'bounced', bounce_count = bounce_count + 1
WHERE email IN (SELECT email FROM recent_hard_bounces);
-- Remove after 3 hard bounces
DELETE FROM mailing_list
WHERE bounce_count >= 3;
Separe devoluções transacionais e de marketing
[email protected] # Order confirmations, receipts
[email protected] # Newsletters, campaigns
Taxas de rejeição diferentes são esperadas para cada tipo.
Configure a automação de processamento de devoluções
Exemplo de Trabalho de Cron:#!/bin/bash
# Process bounces every hour
# Fetch bounces from IMAP
fetchmail -c /etc/fetchmailrc
# Parse and update database
/usr/local/bin/process-bounces.py
# Clean up processed bounces older than 30 days
find /var/mail/bounces -mtime +30 -delete
Backscatter e segurança de devoluções
Problema do backscatter
Quando o seu servidor aceita spam e, em seguida, salta-lo, você está enviando para endereços falsificados:
1. Spammer sends email with forged From
2. Your server accepts it
3. Your server realizes it's spam/invalid
4. Your server bounces to forged From address
5. Innocent party receives bounce (backscatter)
Solução: Rejeitar no tempo SMTP, não aceitar em seguida, saltar:
# Postfix: Reject unknown users at SMTP time
smtpd_recipient_restrictions = reject_unauth_destination
local_recipient_maps = hash:/etc/postfix/local_recipients
Falsificação de devoluções
Os atacantes podem forjar mensagens de rejeição para:
- Colheita endereços válidos
- Entregar spam disfarçado de saltos
- Credenciais Phish através de relatórios de entrega falsos
- Verificar o salto originado do servidor MX
- Verificar o salto é para o e-mail que você realmente enviou
- Analisar cuidadosamente os cabeçalhos do estado de entrega
Cenários comuns de devolução
Cenário 1: todas as mensagens devolvidas
Causa: Falha SPF, lista negra IP ou reputação do servidor Check: Registros SPF, reputação do remetente IP, relatórios DMARCCenário 2: as devoluções não são recebidas
Causa: Endereço de salto mal configurado ou não existe Check: Registros MX para domínio de salto, caixa de correio existeCenário 3: alta taxa de devoluções temporárias
Causa: Servidores beneficiários sobrecarregados, limitantes de taxa, mensagens grandes Verificar: Taxa de envio, tamanho da mensagem, erros no servidor destinatárioCenário 4: ciclos de devolução
Causa: O endereço Bounce aciona a resposta automática, que aciona outro salto Verificar: Desactivar as respostas automáticas nos endereços de rejeiçãoTeste do processamento de devoluções
Enviar email de teste com destinatário inválido:# Test bounce to invalid address
swaks --to [email protected] \
--from [email protected] \
--server mx.test-domain.com
# Check if bounce arrives at [email protected]
Verifique o SPF para o domínio de rejeição:
dig bounces.example.com TXT
# Should show SPF record with authorized senders
O gerenciamento adequado do endereço de rejeição é fundamental para manter a reputação do remetente, a higiene da lista e a entregabilidade.