Czym jest adres odbicia?
Adres odbicia, nazywany także ścieżką zwrotną lub nadawcą koperty, to adres e-mail otrzymujący powiadomienia o niedostarczeniu (NDR), gdy wiadomości nie można dostarczyć. Adres ten różni się od widocznego dla odbiorców adresu „From” i służy wyłącznie do automatycznych powiadomień o dostarczeniu.
Jak działają adresy odbić
Transmisja poczty e-mail wykorzystuje dwa zestawy adresów:
From w nagłówku (widoczny dla odbiorcy):From: John Doe <[email protected]>
From w kopercie (na poziomie SMTP, używany do odbić):
MAIL FROM: <[email protected]>
Gdy dostarczenie się nie powiedzie, serwer odbierający wysyła odbicie do nadawcy koperty, a nie na adres From z nagłówka.
Przykład rozmowy 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]
Typy odbić wiadomości e-mail
Odbicia trwałe
Trwałe niepowodzenia dostarczenia:
- Użytkownik nie istnieje: 550 No such user
- Domena nie istnieje: 550 Domain not found
- Odrzucenie przez zasady: 550 Spam blocked
Odbicia tymczasowe
Tymczasowe niepowodzenia:
- Skrzynka pełna: 452 Insufficient system storage
- Serwer tymczasowo niedostępny: 421 Service not available
- Wiadomość za duża: 552 Message size exceeds limit
Odbicia blokujące
Problemy z dostarczalnością:
- Adres IP na czarnej liście: 554 Service unavailable; Sender IP blocked
- Treść odfiltrowana jako spam: 550 Spam score too high
- Ograniczenie częstotliwości: 450 Too many emails
Konfiguracja adresu odbicia
Ustawianie ścieżki zwrotnej w nagłówkach poczty
PHP (funkcja mail):$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
Dedykowane usługi obsługi odbić
Większość dostawców usług pocztowych oferuje zarządzanie odbiciami:
Amazon SES:{
"Message": {
"Subject": "Test",
"From": "[email protected]",
"ReturnPath": "[email protected]"
}
}
SendGrid:
const msg = {
to: '[email protected]',
from: '[email protected]',
replyTo: '[email protected]',
return_path: '[email protected]',
subject: 'Test Email',
text: 'Email body'
};
Konwencje nazewnictwa adresów odbić
Podejście z subdomeną
[email protected] # General bounces
[email protected] # No-reply emails
[email protected] # Returns/receipts
Specyficzne dla kampanii
Śledź odbicia osobno dla każdej kampanii:
[email protected]
Zmienna kopertowa ścieżka zwrotna (VERP)
Zakoduj odbiorcę w adresie odbicia:
Sending to: [email protected]
Return path: [email protected]
When bounce arrives at bounces+*, parse to identify failed recipient
Przetwarzanie wiadomości o odbiciu
Automatyczne analizowanie odbić
Przykład w Pythonie: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
Obsługa odbić oparta na webhookach
Nowoczesne ESP udostępniają webhooki:
Webhook SendGrid:POST /bounce-webhook
{
"email": "[email protected]",
"event": "bounce",
"reason": "550 5.1.1 User unknown",
"type": "blocked",
"status": "5.0.0"
}
Działanie: zaktualizuj bazę danych, oznaczając adres e-mail jako odbity.
SPF i adresy odbić
SPF sprawdza nadawcę koperty (adres odbicia), a nie From w nagłówku:
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
Konfiguracja SPF domeny odbić
bounces.example.com. IN TXT "v=spf1 include:_spf.sendgrid.net ~all"
Upewnij się, że subdomena odbić ma odpowiednie rekordy SPF dla używanej infrastruktury wysyłkowej.
Dobre praktyki dotyczące adresów odbić
Używaj dedykowanego adresu odbić
Nigdy nie używaj głównego adresu e-mail do odbić:
# Bad
Return-Path: [email protected]
# Good
Return-Path: [email protected]
Monitoruj odsetek odbić
| Odsetek odbić | Ocena | Działanie |
|---|---|---|
| < 2% | Zdrowy | Kontynuuj monitorowanie |
| 2-5% | Niepokojący | Zbadaj jakość listy mailingowej |
| 5-10% | Niski | Natychmiast wyczyść listę |
| > 10% | Krytyczny | Zagrożona dostarczalność |
Wdróż przetwarzanie odbić
Automatyzuj usuwanie trwałych odbić:
-- 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;
Oddziel odbicia transakcyjne od marketingowych
[email protected] # Order confirmations, receipts
[email protected] # Newsletters, campaigns
Różne odsetki odbić są oczekiwane dla każdego typu.
Skonfiguruj automatyzację przetwarzania odbić
Przykład zadania 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 i bezpieczeństwo odbić
Problem backscatter
Gdy serwer przyjmuje spam, a następnie wysyła jego odbicie, wysyłasz wiadomość na sfałszowane adresy:
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)
Rozwiązanie: odrzucaj wiadomość podczas sesji SMTP, zamiast ją przyjąć, a następnie odsyłać:
# Postfix: Reject unknown users at SMTP time
smtpd_recipient_restrictions = reject_unauth_destination
local_recipient_maps = hash:/etc/postfix/local_recipients
Fałszowanie odbić
Atakujący mogą fałszować wiadomości o odbiciu, aby:
- zbierać prawidłowe adresy
- dostarczać spam udający odbicia
- wyłudzać dane uwierzytelniające za pomocą fałszywych raportów dostarczenia
- Sprawdź, czy odbicie pochodzi z serwera MX
- Zweryfikuj, czy dotyczy wiadomości rzeczywiście wysłanej przez Ciebie
- Ostrożnie analizuj nagłówki statusu dostarczenia
Typowe scenariusze odbić
Scenariusz 1: Wszystkie wiadomości odbijają się
Przyczyna: niepowodzenie SPF, adres IP na czarnej liście lub reputacja serwera Sprawdź: rekordy SPF, reputację adresu IP nadawcy i raporty DMARCScenariusz 2: Odbicia nie są odbierane
Przyczyna: nieprawidłowo skonfigurowany lub nieistniejący adres odbić Sprawdź: rekordy MX domeny odbić i istnienie skrzynkiScenariusz 3: Wysoki odsetek odbić tymczasowych
Przyczyna: przeciążone serwery odbiorców, ograniczenie częstotliwości lub duże wiadomości Sprawdź: tempo wysyłki, rozmiar wiadomości i błędy serwera odbiorcyScenariusz 4: Pętle odbić
Przyczyna: adres odbić wywołuje automatyczną odpowiedź, która uruchamia kolejne odbicie Sprawdź: wyłącz autorespondery dla adresów odbićTestowanie obsługi odbić
Wyślij wiadomość testową do nieprawidłowego odbiorcy:# Test bounce to invalid address
swaks --to [email protected] \
--from [email protected] \
--server mx.test-domain.com
# Check if bounce arrives at [email protected]
Zweryfikuj SPF domeny odbić:
dig bounces.example.com TXT
# Should show SPF record with authorized senders
Prawidłowe zarządzanie adresem odbić ma kluczowe znaczenie dla utrzymania reputacji nadawcy, higieny listy mailingowej i dostarczalności.