Bonjour,
Je tente de developper un outil pour parser les logs postfix, je fais d'abord un
cat $D_LOGS/$v_fich | grep "status=bounced" > bounces.tmp
qui me permet de ne traiter que les bounces,
le but est d'écrire un fichier CSV à importer en bdd avec les champs :
nom_serveur, email, domaine, cause_bounce, date_badmail
un exemple de ligne du log est
Aug 20 08:57:00 serveurname postfix/smtp[1965]: 732DBD4C867: to=<toto.toto@wanadoo.fr>, relay=smtp.wanadoo.fr[193.252.22.78]:25, delay=0.1, delays=0.04/0/0.03/0.03, dsn=5.0.0, status=bounced (host smtp.wanadoo.fr[193.252.22.78] said: 550 <toto.toto@wanadoo.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command))
Mon premier jet étais avec la commande sed sous la forme :
sed '/@/!d;s/^\(.*\)'$(hostname)'.*<\(.*@\(.*\)\)>.*bounced\(.*\)$/'$(hostname)'|\2|\3|\4|\1/' bounces.tmp >>$(hostname).csv
cependant, impossible d'obtenir une date correcte car l'année ne figure pas dans les logs et le format est un peu arbitraire ... ne pouvant facilement bricoler la date, j'ai changé mon fusil d'épaule en utilisant :
while IFS=$' ' read mois jour heure serveur process id destinataire relay delay delays dsn status infos
do
echo -e "
mois : $mois \n\
jour : $jour \n\
heure : $heure \n\
serveur : $serveur \n\
process : $process \n\
id : $id \n\
destinataire : $destinataire \n\
relay : $relay \n\
delay : $delay \n\
delays : $delays \n\
dsn : $dsn \n\
status : $status \n\
infos : $infos \n";
done < bounces.tmp
cependant, le champ destinataire est alors de la forme : to=<toto.toto@wanadoo.fr>, et pas seulement le mail ...
J'ai essayer de faire une fonction extract avec 3 paramètres, le premier la chaine, le second la chaine de debut (ici <) le troisième la chaine de fin (ici >) mais ça ne fonctionne pas ... :
extract()
{
local str deb fin temp
str="${1:-''}"
deb="${2:-'<'}"
fin="${3:-'>'}"
$temp = echo ${str#*$deb}
$temp2 = echo ${temp%*$fin}
return $temp2
}
Merci de me venir en aide soit en améliorant le sed pour pouvoir ajouter l'année (soit en cours soit l'année de création du fichier de log), soit en réussissant la fonction de découpe de chaine avec délimiteurs ...
A moins que vous n'ayez d'autre idées ?????
En vous remerciant
StéphaneConfiguration: Windows XP
Internet Explorer 7.0

