O que é um endereço Bounce?
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 os endereços de Bounce funcionam
A transmissão por e-mail utiliza dois conjuntos de endereços:
Cabeçalho De (visível para destinatário):From: John Doe <john@example.com>
Envelope From (SMTP-level, usado para saltos):
MAIL FROM: <bounces@example.com>
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: <bounces@example.com>
Server: 250 OK
Client: RCPT TO: <invalid@recipient.com>
Server: 550 No such user here
Client: QUIT
# Later, server sends bounce to bounces@example.com
Tipos de E-mail Bounces
"Duro balança"
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
# # Balanças suaves
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
# # Block Bounces
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 do Endereço de Salto
Configuração do Caminho de Retorno nos Cabeçalhos de E- mail
PHP (função de correio):$to = "recipient@example.com";
$subject = "Test Email";
$message = "Email body";
$headers = "From: sender@example.com\r\n";
$headers .= "Return-Path: bounces@example.com\r\n";
mail($to, $subject, $message, $headers, "-f bounces@example.com");
PHPMailer:
$mail = new PHPMailer();
$mail->From = "sender@example.com";
$mail->Sender = "bounces@example.com"; // Return path
$mail->addAddress("recipient@example.com");
$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 bounces@example.com
# Apply changes
postmap /etc/postfix/sender_canonical
systemctl reload postfix
Serviços de Manuseamento de Salto Dedicado
A maioria dos provedores de serviços de email oferecem gerenciamento de rejeição:
Amazon SES:{
"Message": {
"Subject": "Test",
"From": "sender@example.com",
"ReturnPath": "bounces@example.com"
}
}
EnviarGrid:
const msg = {
to: 'recipient@example.com',
from: 'sender@example.com',
replyTo: 'reply@example.com',
return_path: 'bounces@example.com',
subject: 'Test Email',
text: 'Email body'
};
Convenções de nomeação de endereços
Abordagem do Subdomínio
bounces@example.com # General bounces
no-reply@example.com # No-reply emails
returns@example.com # Returns/receipts
# Específico da Campanha
Faixa de saltos por campanha:
bounces-newsletter@example.com
bounces-campaign-123@example.com
bounces-transaction@example.com
Caminho de Retorno do Envelope Variável (VERP)
Codificar o destinatário no endereço de rejeição:
Sending to: user@recipient.com
Return path: bounces+user=recipient.com@example.com
When bounce arrives at bounces+*, parse to identify failed recipient
Processando mensagens de salto
Processamento automático de salto
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
Manuseamento de salto baseado em webhook
ESPs modernos fornecem webhooks:
SendGrid Webhook:POST /bounce-webhook
{
"email": "recipient@example.com",
"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.
Endereços SPF e Bounce
O SPF verifica o remetente do envelope (endereço de salto), não o cabeçalho From:
Message:
From: newsletter@example.com (header)
Return-Path: bounces@mail-server.com (envelope)
SPF Check:
Queries: mail-server.com TXT record (not example.com)
Must include sending IP in mail-server.com's SPF
Configuração do SPF de Domínio de Salto
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.
Melhores práticas de discurso
# # # Use um endereço de salto dedicado
Nunca use seu e-mail primário para saltos:
# Bad
Return-Path: info@example.com
# Good
Return-Path: bounces@example.com
Monitorar as Taxas de Salto
| 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 |
Implementar o Processamento de Salto
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;
# # # Separação Transacional e Marketing Salta
transactional-bounces@example.com # Order confirmations, receipts
marketing-bounces@example.com # Newsletters, campaigns
Taxas de rejeição diferentes são esperadas para cada tipo.
Configurar a Automação de Processamento Bounce
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 Bounce Segurança
# Problemas com o espalhador de costas
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 Salto
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 salto
Cenário 1: Todos os e-mails
Causa: Falha SPF, lista negra IP ou reputação do servidor Check: Registros SPF, reputação do remetente IP, relatórios DMARCCenário 2: Salta Não Ser Recebido
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 Salto Macio
Causa: Servidores beneficiários sobrecarregados, limitantes de taxa, mensagens grandes Verificar: Taxa de envio, tamanho da mensagem, erros no servidor destinatárioCenário 4: Saltitar
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çãoTratamento de Salto de Testes
Enviar email de teste com destinatário inválido:# Test bounce to invalid address
swaks --to invalid-user@test-domain.com \
--from bounces@example.com \
--server mx.test-domain.com
# Check if bounce arrives at bounces@example.com
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.