Intestazioni di posta non consegnate non elaborate (posta rimbalzata)


9

Qual è il modo migliore per analizzare le intestazioni di e-mail rimbalzate (non consegnabili) che vengono inviate al mio server e determinare se si tratta di un rimbalzo morbido o rigido?

Mando solo e-mail di opt-in ai miei utenti, ma a volte alcuni indirizzi e-mail diventano obsoleti. Quando un'e-mail rimbalza sul mio server, vorrei scoprire perché è rimbalzata (soft / hard). Quindi posso gestirlo in modo appropriato nel mio database e / o contrassegnare l'utente per aggiornare la propria e-mail al successivo accesso.

Sto usando Ubuntu e Postfix. Ho implementato con successo VERP con alias e alias virtuali. Quindi le email rimbalzate hanno un percorso di ritorno di bounce+OrigEmailAddress@example.com e posso reindirizzarle a uno script.

Ora che ho impostato VERP, so a chi è stata inviata l'e-mail originale, ma devo analizzare le intestazioni di posta restituite per capire se si tratta di un soft bounce o hard bounce.

Qual è il modo migliore per gestirlo? A quanto ho capito, non tutti i server di posta giocano con le stesse regole e le intestazioni possono avere una varietà di formati. C'è qualche progetto open source che tiene traccia di questo tipo di cose? Qualcosa di semplice che posso implementare che classificherà correttamente la maggior parte dei rimbalzi?

Sto cercando di proteggere la reputazione del mio server di posta, quindi ogni aiuto è molto apprezzato!

Risposte:


9

Come spiega RFC3463 , i codici di stato che iniziano con 5 vengono utilizzati per guasti permanenti e 4 per guasti transitori persistenti. Invece di provare ad analizzare diversi messaggi con formati diversi, puoi fare affidamento sui log del server e provare qualcosa del genere:

grep " dsn=5." /var/log/mail.log | grep -o -P " to=<(.+?)>" | sort | uniq -c

Questo troverà errori permanenti da mail.log (formato Postfix) e fornirà gli indirizzi e la quantità di rimbalzi su ogni indirizzo. Puoi anche usare "dsn = 4". per ottenere indirizzi con errori temporanei.


Grazie Esa! Non mi rendevo conto che Postfix aveva quelle informazioni nel registro di posta. È questa la soluzione che usi? Trovi che postfix classifica correttamente i rimbalzi duri dsn = 5? Ho letto che alcuni server di posta non sono conformi a RFC. Quindi ho pensato che potrebbe essere necessaria una soluzione più complicata. Qual è stata la tua esperienza? Questa sembra una buona soluzione se possiamo testare Postfix per farlo bene :-)
Richard

Script davvero utile - grazie! Ricetta qui per un'alternativa al flag -P di grep (per utenti Mac, ecc.): Unix.stackexchange.com/a/437694/275762 grep " dsn=5." /var/log/mail.log | pcregrep -o1 " to=<(.+?)>" | sort | uniq -c
Peter M.

8

Generalmente ci sono due tipi di rimbalzi

  1. I rimbalzi causati dal rifiuto diretto del server di posta remoto quando il postfix recapita l'e-mail.
  2. I rimbalzi causati dal server remoto (server dell'hop successivo dopo il postfisso) non riescono a recapitare il messaggio ai destinatari finali.

Il primo caso era già stato coperto dall'eccellente risposta di Esa Jokinen sopra. La tua scommessa migliore è analizzare maillog.

Il secondo caso era un caso speciale di rimbalzi. Lo scenario di esempio:

  • Si invia e-mail con il destinatario fakemail@example.com al server mail.example.com .
  • In mail.example.com, fakemail@example.com è stato assegnato a realmail@example.net e deve essere inoltrato a mail.example.net .
  • Un giorno mail.example.net rifiuta il tuo messaggio, quindi mail.example.com deve inviare rimbalzi al tuo server.
  • Sfortunatamente maillog nel tuo server avrà "dsn = 2" perché mail.example.com ha già accettato il messaggio ma non è riuscito a inoltrarlo a mail.example.net .

Qui l'esempio del secondo tipo rimbalza la posta elettronica. Esiste la regola di inoltro del server di posta Yahoo myuser@yahoo.com -> myuser@example.net . Sfortunatamente il server di posta di example.net rifiuta il messaggio :(

From MAILER-DAEMON  Thu Mar  5 05:07:26 2015
Return-Path: <>
X-Original-To: noreply-myuser=yahoo.com@example.org
Delivered-To: noreply-263462085117-1425506829-myuser=yahoo.com@example.org
Received: from nm21-vm7.bullet.mail.gq1.yahoo.com (nm21-vm7.bullet.mail.gq1.yahoo.com [98.136.217.54])
        (using TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits))
        (No client certificate requested)
        by mx.example.org (Postfix) with ESMTPS id D6365565FC
        for <noreply-263462085117-1425506829-myuser=yahoo.com@example.org>; Thu,  5 Mar 2015 05:07:25 +0700 (WIT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=bounce; t=1425506842; bh=zk/tWZNl6c36dmlPDmakM9ekK8cHVJANXMmSdsbkcWc=; h=From:To:Date:Subject:From:Subject; b=Im95h1qTg6qN3yUI7vF1fXtJ0SbUnzv8rUPwLbpNwxGPN2p8wfosXJzQgJ3nzr4L4ZQ50P2d9E9U4jEUNtnyi7nlFd5kKbtiVuda4H56h1PFnt+7wSpgHcd5Irs/lLODumb6ZZSEpCOWttcB9+JLaDfEUUPjGcbR+xww4XeH5Eo=
From: MAILER-DAEMON@yahoo.com
To: noreply-263462085117-1425506829-myuser=yahoo.com@example.org
Date: Wed, 04 Mar 2015 22:07:22 -0000
Subject: Failure Notice
X-Yahoo-Newman-Property: bmbounce

Sorry, we were unable to deliver your message to the following address.

<myuser@example.net>:
Remote host said:
550 5.1.1 User unknown
 [RCPT_TO]

In questo caso, l'unico metodo è analizzare il messaggio di rimbalzo. Sfortunatamente non esiste un formato di rimbalzo standard, quindi è necessario analizzare il corpo e determinare il rifiuto causato.

L'elenco di controllo delle funzioni dell'analisi di rimbalzo postfix:

  1. Controlla se l'indirizzo VERP era valido. Non vuoi analizzare un messaggio non valido.
  2. Analizza il corpo, determina se sono rigidi o rigidi.

Per la seconda funzione, puoi cercare su Google alcuni messaggi di rifiuto comuni. L'esempio è questo bounce-regex-list.xml di Jakub Liska .


Esa Jokinen ha fatto un buon punto nel commento qui sotto su questi due tipi di rimbalzo. Se il tuo obiettivo è mantenere la reputazione del server, allora trattare il primo tipo di rimbalzo dovrebbe essere sufficiente. Il secondo rimbalzo riguardava la pulizia delle tue liste. Quindi le email morte dovrebbero essere cancellate liberando così alcune risorse nel tuo server.

Alcuni gestori di mailing list come PHPlist e Mailman affrontano anche questo problema di rimbalzo con l'analisi del corpo dell'e-mail in quanto non hanno risorse per l'analisi del maillog.


1
Questa soluzione è utile e più completa se è necessario gestire anche le mail inoltrate automaticamente a un altro indirizzo. Tuttavia, se l'obiettivo è proteggere la reputazione del server di posta, la gestione dei rifiuti diretti dovrebbe essere sufficiente. Gli amministratori dell'MTA di inoltro devono rimuovere inoltri e elenchi di posta obsoleti (per proteggere la loro reputazione ed evitare il traffico non necessario). Dopodiché torniamo al primo caso. OP dovrebbe usare questa soluzione se la quantità di rimbalzi secondari è significativa. Che richiede sempre meno sforzo.
Esa Jokinen,

@masegaloeh, grazie per le informazioni! Non avevo nemmeno considerato quella situazione di spedizione come una possibilità! Per ora mi occupo principalmente di proteggere il rappresentante del mio server di posta, ma se i rimbalzi aumentano questo può essere molto utile.
Richard
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.