SME et les mails

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server

Modérateur: modos Ixus

SME et les mails

Messagepar ecureuil1 » 04 Déc 2006 14:00

bonjour,

J'aimerais connaitre le shéma de récupération des mails avec sme.

Où se situe fechmail, clamav, spamassassin, qmail dans ce shéma?

j'aimerais rajouter un petit script pour vider les boites mails, des mails vieux de plus de temps de jours chez les différents fai qui hébergent mes mails...

J'ai l'impression que fetchmail n'a toujours pas cette option, soit on laisse tous les mails, soit on garde tous les mails...

Si quelqu'un a une idée du shéma et où je pourrais insérer ce script...

anne
ecureuil
Avatar de l’utilisateur
ecureuil1
Contre-Amiral
Contre-Amiral
 
Messages: 448
Inscrit le: 04 Avr 2002 00:00
Localisation: Grenoble, France

Re: SME et les mails

Messagepar sibsib » 04 Déc 2006 23:38

Salut Anne,

ecureuil1 a écrit:bonjour,

J'aimerais connaitre le shéma de récupération des mails avec sme.

Où se situe fechmail, clamav, spamassassin, qmail dans ce shéma?


On va partir du principe que tu parles de SME 7 (SME 6 et avant, c'est assez fortement différent).

qmail gère la la distibution du courrier en interne, et l'expédition du courrier vers l'extérieur. Ce n'est pas lui qui répond aux sollicitations pour le courrier entrant.
Le courrier entrant est traité par qpsmtpd
qpsmtpd se charge de répondre sur le port 25.
A chaque connexion sur le port 25, il fait toute une série de contrôle de validité :
1) Au tout début, contrôle de syntaxe assez strict.
2) Si se controle passe, envoi d'une requête en background pour savoir si l'IP de l'émetteur est valide
3) En attendant la réponse, début de dialogue SMTP pour récupérer l'ensemble des en-têtes (et refus de mail si pas conforme.
4) Si l'IP est valide, réception du mail sans fermeture de la session.
5) Le mail est passé à spamassassin et à clamav, et uniquement si les deux ont donné leur feu vert, qpsmtpd valide la réception du mail au niveau de la source.

Ce process est très lourd (c'est pouquoi les machines doivent être velues en mémoire pour supporter SME 7), mais permet de refuser le mail directement, plutôt que d'envoyer un mail d'échec à un emetteur inexistant.

fetchmail se charge de chercher un mail en POP3 ou IMAP4, et de l'injecter dans le système de messagerie en SMTP standard. Donc, qpsmtpd fait quasiment les mêmes checks pour les courriers 'fetchés' que que les autres, au contrôle d'IP près -puisque en l'occurence, l'IP de fetchmail est forcément locale.

J'ajoute qu'un problème existe actuellement (que je n'ai pas su -encore- contourner) entre qpsmtpd et fetchmail : si un mail fetché est refusé par qpsmtpd, fetchmail essaye d'avertir l'expéditeur, en envoyant un mail. Mais, pour cause d'adresse d'émetteur (de type FETCHMAIL-DAEMON@{nom de machine}.{nom de domaine}) non valide pour qpsmtpd, le message de bounce coince.

ecureuil1 a écrit:j'aimerais rajouter un petit script pour vider les boites mails, des mails vieux de plus de temps de jours chez les différents fai qui hébergent mes mails...

J'ai l'impression que fetchmail n'a toujours pas cette option, soit on laisse tous les mails, soit on garde tous les mails...

Si quelqu'un a une idée du shéma et où je pourrais insérer ce script...

anne


Bonne idée, çà (encore que je ne vois pas l'intérêt de laisser des mails fetchés chez les fai...). Je ne vois pas comment fetchmail pourrait faire ceci, par contre.

Sur ta machine locale, c'est hyper simple :
Code: Tout sélectionner
find /home/e-smith/files/users/*/Maildir/[le nom du dossier de mail que tu veux nettoyer] -type f -mtime +7 -exec rm -f {} \;


à affiner un peu, mais déjà testé pour nettoyer les répertoires junkmail

A+,
Pascal
Sibsib, admin heureux d'un petit SME !!!
- SME 8.0 beta 6 dans une VM :-)
- ESXI 4.1 sur hardware noname
Ma petite page sur SME
Avatar de l’utilisateur
sibsib
Amiral
Amiral
 
Messages: 2368
Inscrit le: 11 Mai 2002 00:00
Localisation: France - région parisienne

Messagepar ecureuil1 » 06 Déc 2006 05:31

bon le script est presque fini...

il me manque un truc :

Transfomer la date du mail qui est sous la forme :
Mon, 12 Dec 2005 02:50:37 +0100
en aaaammjj.

Si quelqu'un a une idée...

anne
ecureuil
Avatar de l’utilisateur
ecureuil1
Contre-Amiral
Contre-Amiral
 
Messages: 448
Inscrit le: 04 Avr 2002 00:00
Localisation: Grenoble, France

Messagepar sibsib » 06 Déc 2006 21:56

Hello,

Il y a pleins de soluces, des outils spécialisés, des librairies si ton script est écrit en perl...

Sinon, un peu bourrin (mais testé avant envoi ;-) ) :

Code: Tout sélectionner
echo "Mon, 12 Dec 2005 02:50:37 +0100" | awk '
BEGIN { a["jan"]=1 ; a["feb"]=2 ; a["mar"]=3 ; a["apr"]=4 ; a["may"]=5 ; a["jun"]=6 ; a["jul"]=7 ; a["aug"]=8; a["sep"]=9 ; a["oct"]=10 ; a["nov"]=11 ; a["dec"]=12 }
{ printf "%4d%02d%02d\n", $4, a[tolower($3)], $2 } '


En plus, comme la table a utilise les nom de mois comme clef, tu peux mettre aussi les mois en français -et en serbo croate, si tu le causes (pas forcément utile dans ce cas, mais pour le fun ;-) )

A+,
Pascal
Sibsib, admin heureux d'un petit SME !!!
- SME 8.0 beta 6 dans une VM :-)
- ESXI 4.1 sur hardware noname
Ma petite page sur SME
Avatar de l’utilisateur
sibsib
Amiral
Amiral
 
Messages: 2368
Inscrit le: 11 Mai 2002 00:00
Localisation: France - région parisienne

Messagepar ecureuil1 » 07 Déc 2006 04:35

ca y est le script fonctionne...

j'ai supprimé les mails dont la date est supérieure à X jours d'une de mes boites chez free...

Je sauvegarde les mails supprimés dans un fichier au format mail box sur le serveur...

Je veux juste faire une petite amélioration avant de mettre le script ici :
utiliser un fichier qui contiendra la liste des boites mails avec
- le nom du serveur pop
- le login
- le mot de passe
- le nombre de jours à garder pour la boite mails

pour l'instant ces infos sont en durs dans le programme

anne
ecureuil
Avatar de l’utilisateur
ecureuil1
Contre-Amiral
Contre-Amiral
 
Messages: 448
Inscrit le: 04 Avr 2002 00:00
Localisation: Grenoble, France

Messagepar jibe » 07 Déc 2006 20:50

Salut,

Sympa, ton petit script, Anne (bien que, comme sibsib, je ne vois pas trop l'intérêt de laisser les mails chez le FAI, mais bon si ça peut servir à certains...).

Tu auras probablement fini quand tu me liras, mais okazou : AMHA, soit tu mets tes données paramétrables dans des variables en début de script où elles seront (presque) aussi configurables que dans un fichier, soit tu passes à la vitesse supérieure, contrib complète avec panel dans le server-manager, mais là c'est effectivement un autre boulot !

Mais dans le fond, le but n'est-il pas plutôt d'adjoindre ton script à la contrib de sibsib ? Auquel cas, tu lui donnes ton script et il l'adaptera pour qu'il lise les données dans la conf de SME-fetchmail :wink:
"Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire" (Albert Einstein)

Autrefois, l'Etat défendait des valeurs. Maintenant, il défend des profits... (Anne Haunnime)
Avatar de l’utilisateur
jibe
Amiral
Amiral
 
Messages: 4366
Inscrit le: 17 Oct 2003 00:00
Localisation: Haute Savoie

Messagepar ecureuil1 » 08 Déc 2006 05:28

On m'a posé plusieurs fois la question, pourquoi laisser les mails chez les FAI.

Normalement, on fait des sauvegardes journalières du serveur.
Entre 2 sauvegardes, il s'écoule 24 heures.
Si un problème disque se produit, il peut y avoir 24 heures de mails perdus...
Donc, j'aime bien avoir un peu de marge pour pouvoir récupérer les derniers mails en cas de problème.

Avec fetchmail, soit on laisse tous les mails chez le fai, soit on les supprime tous au fur et à mesure du traitement.

J'ai donc pris l'option de tout laisser chez le fai et je vais périodiquement supprimer les mails chez les fai. Franchement galère!

Bon, maintenant ce que j'ai fait : pouvoir supprimer les vieux mails automatiquement.

il faut installer des modules perl supplémentaires

----------------------
1) ajouter ces lignes dans /etc/yum.conf :

[dag]
enabled=0
name=Dag - EL4
baseurl=http://apt.sw.be/redhat/el4/en/$basearch/dag
gpgcheck=1
enablegroups=0
exclude=freetype htop iptraf rsync syslinux
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

[kbs-centos-extras]
enabled=0
name=Karan - EL4 - Extra
baseurl=http://centos.karan.org/el4/extras/stable/$basearch/RPMS/
gpgcheck=1
enablegroups=0
Exclude=oidentd perl-FreezeThaw perl-IO-stringy perl-Net-Server perl-Test-Inline perl-Text-Template ulogd
GPGKey=http://centos.karan.org/RPM-GPG-KEY-karan.org.txt

J'ai mis ces lignes entre [contrib] et [extras]

----------------------
2) Installation de perl-Date-Calc-5.3-9.i386.rpm :
yum install perl-Date-Calc --enablerepo=base

----------------------
3) Installation de perl-Email-Simple-1.995-1.el4.rf.noarch.rpm :
yum install perl-Email-Simple --enablerepo=dag

----------------------
4) script bash pour appeler le pgm : mail_delete
Il faut modifier ce script pour donner le chemin d'accès au répertoire où vous mettez les 3 scripts (mail_delete - mail_del - mail_del.rc)

#!/bin/sh

#set -x

cd /home/e-smith/files/ibays/Primary/files/mail_suppr/essai_mail

date_exec=`date '+%Y%m%d%H%M'`
#echo $date_exec

# nom du fichier de log
fich_log=mail_$date_exec

./mail_del > $fich_log

----------------------
5) fichier de configuration pour mettre toutes les boites mails à traiter : mail_del.rc

# serveur login password nb_jours
pop.free.fr your_login your_mdp 30
pop.wanadoo.fr your_login1 your_mdp1 8

----------------------
6) script perl pour traiter les boites mails : mail_del

#!/usr/bin/perl

#==========================================================
# Suppression mail chez FAI
# dont la date est antérieure à la date du jour - x jours
#
# créé le 6/12/2006 par anne aublanc
#==========================================================

use strict;
use Email::Simple;
use Net::POP3;
use Date::Calc qw(:all);

sub usage { die "usage: getmail file\n" }

# date du jour
my ($j,$m,$a)=(localtime)[3,4,5];
$m++;
$a +=1900;
my $date_jour = (($a * 10000) + ($m * 100) + $j);

# heure
my ($mn,$hr)=(localtime)[1,2];
$mn = sprintf("%02d", $mn);
$hr = sprintf("%02d", $hr);

# Récup des différents comptes mail à traiter
my $ConfFile = "mail_del.rc";
my @ConfEntries = ();
open (CF, $ConfFile) || die ("ERROR: Could not find $ConfFile");
@ConfEntries = <CF>;
chop (@ConfEntries);
close (CF);

my $Entry;

# Lecture de chaque compte mail
#------------------------------
foreach $Entry (@ConfEntries) {

next if ($Entry =~ /^\s+#|^#/);
my ($server, $login, $passwd, $sauv_jour) = split (/\s+/, $Entry);

my $nb_mes = 0;
my $nb_del = 0;

# date du jour - X jours
my ($aa,$mm,$jj)= Add_Delta_Days($a,$m,$j,-$sauv_jour);
my $date_X = (($aa * 10000) + ($mm * 100) + $jj);

print "X jours avant : $jj/$mm/$aa --- $date_X --- date du jour : $date_jour\n";

# nom du fichier de sauvegarde des mails
my $mbox = $login.'_'.$date_X.$hr.$mn;
$| = 1;

print "connecting to $server.. ";
my $pop = new Net::POP3 $server
or die "error: can't connect to $server: $!\n";
print "ok\n";

$pop->login($login, $passwd);
$pop->ok or die "error: wrong username or password\n";

my ($undeleted, $size) = $pop->popstat;
my $last = $pop->last;

print "mail box size: $login $size\n",
"$undeleted unread mail(s).\n",
"last read mail was number $last\n";

open(MBOX, '>', $mbox) or die "error: can't write '$mbox': $!\n";
my $fetched = 0;
for my $num (1..$undeleted) {
my $msg = $pop->get($num);
next unless ref $msg;
my $date_mail = mbox_envelope($msg);
#print "date date_mail : $date_mail\n";
#print "date du jour : $date_jour\n";
#print "date -X : $date_X\n";
$nb_mes++;
# sauvegarde du mail si suppression
if ( $date_mail <= $date_X ) {
$nb_del++;
print MBOX @$msg, $/;
######## $pop->delete($num);
}
$fetched += $pop->list($num);
#printf "\rfetched %2.0f%%\n", $fetched*100/$size;
}
close(MBOX);
print $/;
$pop->quit;

print "nbre mail total : $nb_mes\n";
print "nbre mail supprimé : $nb_del\n";
print "------------------------------\n\n";

# scan du fichier de sauvegarde à l'anti-virus
my $scan = 'scan_'.$date_X.$hr.$mn.'.txt';
`echo "\nfichier : $mbox" >> $scan`;
`clamscan -r -l $scan $mbox`;

}

# récup des infos pour avoir le format mailbox pour la sauvegarde du mail
sub mbox_envelope {
my $text = $_[0];
my $msg = new Email::Simple join '', @$text;
my $date = $msg->header('Date');
my $from = $msg->header('Return-Path');
$from = $msg->header('From') unless $from;
$from =~ s/[<>]//g;
$from =~ /(\S+\@\S+)/ and $from = $1;
unshift @$text, "From $from $date\n";
my $dt_amj = `date "+%Y%m%d" --date "$date"`;
#print "-----------------------\n";
#print "date mail = $date \ndate dt_amj : $dt_amj\n";
return($dt_amj);
}

----------------------

J'ai mis en commentaires la suppression des mails chez le fai.
Pour supprimer les mails il faut enlever les # de cette ligne :
######## $pop->delete($num);

J'ai fait des tests... mais ...
Il vaut mieux faire un premier test sans enlever les #, les mails ne seront pas supprimés!

Pour appeler le programme :
./mail_delete

il va créer plusieurs fichiers : (Le nom des fichiers contient la date et l'heure)

mail_DateHeure : récapitulatif des boites mails traitées avec le nombre de mails contenus avant suppression et le nombre de mails supprimés

nom-boite-mail_DateHeure
: sauvegarde des mails avant suppression. Attention si vous n'avez jamais supprimé de mails, le fichier peut-être énorme.
Il y a autant de fichiers que de boite mail.

scan_DateHeure.txt : Je passe chaque fichier contenant les sauvegardes à l'anti-virus (clamav). Ce fichier contient le résultat du scan de chaque fichier de sauvegarde des mails supprimés.


Si vous avez des commentaires, des questions...

anne
Dernière édition par ecureuil1 le 08 Déc 2006 20:35, édité 1 fois au total.
Avatar de l’utilisateur
ecureuil1
Contre-Amiral
Contre-Amiral
 
Messages: 448
Inscrit le: 04 Avr 2002 00:00
Localisation: Grenoble, France

Messagepar jibe » 08 Déc 2006 19:40

Salut Anne,

Effectivement, ton astuce de laisser les mails chez le FAI entre deux sauvegardes est très judicieuse !

Et merci pour ton petit script Image
Avatar de l’utilisateur
jibe
Amiral
Amiral
 
Messages: 4366
Inscrit le: 17 Oct 2003 00:00
Localisation: Haute Savoie

Messagepar ecureuil1 » 08 Déc 2006 21:02

ce n'est pas tout bon, mon script au niveau de l'analyse des dates...

date: date invalide « jeu., 23 nov. 2006 17:12:41 +0100 »
date: date invalide « ne, 26 XI 2006 12:09:07 +0100 »
date: date invalide « mar, 05 dic 2006 11:49:17 +0100 »
date: date invalide « Mi, 06 Dez 2006 20:17:41 +0100 »

si vous avez une idée pour l'analyse des dates...
Je me mets en recherche!

anne
ecureuil
Avatar de l’utilisateur
ecureuil1
Contre-Amiral
Contre-Amiral
 
Messages: 448
Inscrit le: 04 Avr 2002 00:00
Localisation: Grenoble, France

Messagepar jibe » 09 Déc 2006 00:45

Re...

Impressions après lecture très rapide : C'est quoi ça ? C'est ton script qui rejette ces dates qu'il n'arrive pas à analyser ? Apparemment oui, mais je n'ai pas vu d'où vient le message d'erreur... probablement d'une fonction appelée et non du script lui-même...

Si donc ce sont bien des dates trouvées dans les mails (je croyais pourtant le format standard !?), je pense qu'il faut faire une fonction d'analyse et de mise en forme un peu plus sophistiquée... et permissive ! Donc, probablement un truc avec des regexp... Ou alors le truc bourrin : extraire le premier nombre (jour), le second (année) et ce qu'il y a entre les deux (mois), et analyser le mois d'après un tableau des x possibilités pour chacun des 12... en espérant ne pas avoir d'homonymes par exemple entre Juin et Juillet :roll:

Bon, c'est juste quelques idées, un peu à la bourre pour y réfléchir plus :oops:
"Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire" (Albert Einstein)

Autrefois, l'Etat défendait des valeurs. Maintenant, il défend des profits... (Anne Haunnime)
Avatar de l’utilisateur
jibe
Amiral
Amiral
 
Messages: 4366
Inscrit le: 17 Oct 2003 00:00
Localisation: Haute Savoie


Retour vers E-Smith / SME Server

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité