web-dev-qa-db-fra.com

Comment construire une liste à partir de maillog Postfix

Je souhaite créer une liste à partir de maillog, maillog.x contenant quelque chose comme Date, le courrier électronique de l'expéditeur, le courrier électronique du destinataire et l'objet du message filtrant les courriels de sortie et le domaine de sortie.

J'ai lu des informations sur l'importation d'un fichier csv à partir d'un tableur. Le problème est que je dois ajouter des séparateurs de champs dans le fichier journal. Je ne savais pas comment personnaliser ça. Comment puis-je faire cela, la liste et le séparateur?

Ceci est un exemple d'envoi de journal de courrier

Jun 11 15:24:58 Host postfix/cleanup[19060]: F41C660D98A0: warning: header Subject: TESTING SUBJECT from unknown[XXX.XXX.XXX.XXX]; [email protected]> [email protected]> proto=ESMTP helo=<[192.168.1.91]>
Jun 11 15:25:01 Host postfix/smtp[19062]: F41C660D98A0: to=<[email protected]>, relay=mx-rl.com[xxx.xxx.xxx.xxx]:25, delay=3.4, delays=0.66/0.01/0.86/1.9, dsn=2.0.0, status=sent (250 <538E30D9000A1DD8> Mail accepted)

La liste contiendrait le sujet, de et vers, filtrant par to = [email protected]

2
dstonek

Essayez aillog-hashnize.pl depuis https://Gist.github.com/xtetsuji/1446584 Il s’agit d’un script Perl qui permet d’analyser le fichier maillog et de produire le fichier de sortie au format CSV. Importez ensuite le fichier CSV dans Excel et appliquez le filtre de votre choix (@ destinataire.com).

Perl maillog-hashnize.pl -y 2016 maillog-20160124> maillog.csv

1
friendyogi

Vous pouvez essayer de l’ouvrir avec LibreOffice , il vous demande le séparateur lorsque vous ouvrez un fichier CSV. Pour que cela fonctionne, vous devez renommer le fichier maillog.csv afin que LibreOffice sache qu'il s'agit d'un fichier CSV.

Je soupçonne que ça ne marchera pas bien. Au lieu de cela, je commencerais par obtenir les éléments au bon format avec les outils de ligne de commande Unix.

Utilisez grep pour afficher uniquement les lignes du destinataire qui vous intéresse:

grep -E 'to=[a-z]+\@recipient\.com' 

Utilisez sed pour supprimer les parties de la ligne inutiles. Sed utilise la syntaxe s/find/replace/g. J'utiliserais quatre trouver et remplacer comme ceci:

sed -r 's/.*Subject: //g;s/ from .* from=/\t/g;s/ to=/\t/g;s/ proto=.*//g'

Mettre tout cela ensemble serait cette ligne de commande:

cat maillog.x | grep -E 'to=[a-z]+\@recipient\.com' | sed -r 's/.*Subject: //g;s/ from .* from=/\t/g;s/ to=/\t/g;s/ proto=.*//g' > /tmp/maillist.csv

Alors /tmp/maillist.csv contiendrait:

TESTING SUBJECT [email protected]>  [email protected]>
0