Endereço de Retorno

E-mail e segurança
O endereço usado para relatórios de não entrega (bounces) quando um e-mail não pode ser entregue.
← Voltar ao Glossário

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:

Ação: Remover endereço da lista de discussão imediatamente.

Devoluções temporárias

Falhas temporárias:

Ação: Retentar a entrega, remover após múltiplos saltos suaves.

Devoluções por bloqueio

Problemas de entrega:

Ação: Investigar reputação do remetente e autenticação.

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]

[email protected]

[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 SaltoAvaliaçãoAcção
< 2%SaudávelContinuar o acompanhamento
2-5%AcercaQualidade da lista de e- mail de auditoria
5-10%PobreLimpeza imediata da lista necessária
> 10%CríticoEntregabilidade 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:

Validação:

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 DMARC

Cená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 existe

Cená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ário

Cená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ção

Teste 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.

Coloque este Conhecimento em Prática

Use a API DomScan para verificar disponibilidade de domínio, saúde e muito mais.