date: 08 Nov 2009 title: Home serveur : récupérer ses mails avec fetchmail tags: fetchmail, mail, planet-libre, auto-hébergement xrefs: home-serveur-tri-du-courrier-avec-sieve.txt, home-serveur-installation-du-serveur-web.txt, home-serveur-configuration-du-serveur-imap-dovecot.txt, home-serveur-premiers-reglages.txt, home-serveur-proteger-son-serveur-configuration-du-pare-feu.txt, home-serveur-proteger-son-serveur-configuration-de-fail2ban.txt, home-serveur-installation.txt, home-serveur-quelques-astuces-bien-utiles.txt, home-serveur-configuration-du-serveur-de-mail-postfix.txt, home-serveur-utilisation-de-cles-pour-ssh.txt, home-serveur-openssh.txt, home-serveur-sauvegarde-des-maildirs.txt Maintenant que vous avez un beau serveur mail tout neuf, vous pouvez rapatrier le courrier de vos différents comptes dessus. Certains fournisseurs de services comme Gmail vous permettent de rediriger votre courrier vers une autre boite mail, mais ce n'est pas le cas de tous. Dans ce cas c'est à votre serveur d'aller récupérer le courrier. C'est très simple à faire grâce à fetchmail, un petit utilitaire qui va se connecter périodiquement au(x) serveur(s) que vous voulez pour vous ramener le courrier (comme n'importe quel client mail en fait). Commencez donc par l'installer : sudo apt-get install fetchmail Maintenant vous devez créer un fichier .fetchmailrc dans le home de chacun des utilisateurs qui ont besoin de récupérer leurs mails venant d'autres serveurs. Ce fichier décrira à fetchmail les comptes à surveiller. Vous pouvez d'ailleurs l'écrire un peu comme vous voulez, fetchmail a une syntaxe très laxiste. Vous pouvez par exemple écrire : poll pops.mailoo.org protocol pop3 username "xx@mailoo.org" password "xx" ou bien : poll pops.mailoo.org proto pop3 user "xx@mailoo.org", with password "xx", is "romain" here; En fait, vous pouvez mettre autant de tabulations, de retours à la ligne, de ponctuations ( ",", ";" et ":" ), de petits mots du style "is", "with", "and", "has", "wants" et "options" que vous voulez ! Vous pouvez aussi abréger les mots clé : protocol en proto, username en user, ... Vous pouvez aussi fixer la périodicité de vérification des mails (en secondes), en mettant au début du fichier set daemon 300 Bien sûr, d'autres options sont disponibles mais je ne les trouvent pas essentielles pour un usage basique comme ici. Vous pouvez jeter un œil sur la [doc officielle](http://fetchmail.berlios.de/fetchmail-man.html#29). Enfin, comme le fichier contient vos mots de passe, il est nécessaire de restreindre les droits dessus (d'ailleurs, fetchmail ne démarrera pas si vous n'avez pas mis les bons droits) : chmod 600 .fetchmailrc Quand tout est prêt, vous pouvez lancer le démon Fetchmail avec la commande fetchmail (sans sudo devant). Fetchmail est un processus utilisateur, par conséquant il doit être lancé par chaque utilisateur qui en a besoin. Il est possible de le lancer en tant que root (via le script /etc/init.d/fetchmail) mais cette utilisation est mal adapté pour un système multiutilisateurs car tous les comptes mail des utilisateurs doivent être regroupé dans /etc/fetchmailrc. L'administrateur a alors accès à tout les mot de passe des compte mail des utilisateur... Bref, c'est pourquoi il est mieux (de mon point de vue bien sûr) d'utiliser le fetchmail en mode utilisateur uniquement. Le problème (il y en a quand même un), c'est que ce sont les utilisateurs qui doivent lancer manuellement leur fetchmail après chaque reboot du serveur (chose qui devrait arriver de tant en tant quand même ;) ). Pour éviter ça, vous allez remplacer le script /etc/init.d/fetchmail par celui ci (le [télécharger](http://univers-libre.net/atelecharger/fetchmail)) : #!/bin/sh # # Script d'init des démons fetchmail de chaque utilisateur # possédant un ~/.fetchmailrc. # Defaults DAEMON=/usr/bin/fetchmail OPTIONS="" CONFFILE=".fetchmailrc" PIDFILE=".fetchmail.pid" function start() { for user in `cat /etc/passwd |grep -e ":[0-9][0-9][0-9][0-9]:" |cut -d: -f1` do if [ -e "/home/$user/$CONFFILE" ] then if [ ! -e "/home/$user/$PIDFILE" ] then echo -n "Exécution de fetchmail pour l'utilisateur $user..." su -c "$DAEMON $OPTION" $user if [ $? -eq 0 ] then echo "[OK]" else echo "[Fail]" fi else echo "Fetchmail s'exécute déjà pour l'utilisateur $user." fi else echo "Pas de configuration définit pour l'utilisateur $user." fi done } function stop() { for user in `cat /etc/passwd |grep -e ":[0-9][0-9][0-9][0-9]:" |cut -d: -f1` do if [ -e "/home/$user/$PIDFILE" ] then echo -n "Arrêt de fetchmail pour l'utilisateur $user..." kill `cat "/home/$user/$PIDFILE" |head -1` if [ $? -eq 0 ] then echo "[OK]" else echo "[Fail]" fi else echo "Fetchmail ne s'exécutait pas pour l'utilisateur $user." fi done } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage: /etc/init.d/fetchmail {start|stop|restart}" exit 1 ;; esac exit 0 Le script que j'ai écrit se contente simplement de lancer/arrêter fetchmail pour chaque utilisateur de la machine qui ont définit un .fetchmailrc dans leur home. Vérifiez quand même que fetchmail sera lancé au démarrage, mais à priori il l'ai : find /etc/rc*.d -name "*fetchmail"