Emails · 7 min read · Sep 08, 2025
Récupération des e-mails depuis des serveurs distants avec fetchmail sur Debian

Fetchmail est un programme pour récupérer des e-mails depuis des serveurs distants. Imaginez que vous avez cinq comptes de messagerie sur cinq serveurs différents. Bien sûr, vous ne voulez pas vous connecter à chacun d’eux pour obtenir vos e-mails. C’est là que fetchmail entre en jeu. Si vous avez un compte utilisateur sur un serveur Linux, vous pouvez faire en sorte que fetchmail télécharge des e-mails depuis des serveurs distants et les place dans une seule boîte aux lettres (celle de votre utilisateur Linux), d’où vous pouvez les récupérer avec votre client de messagerie (par exemple, Thunderbird ou Outlook).
Ou imaginez que vous avez un compte de messagerie chez un fournisseur qui ne filtre pas les spams et les virus. Dans ce cas, vous pourriez utiliser fetchmail pour télécharger les e-mails sur votre propre serveur et les faire passer par des filtres anti-spam et anti-virus (par exemple, SpamAssassin et ClamAV) avant de télécharger les e-mails avec votre client de messagerie.
1 Remarque préliminaire
Vous avez besoin d’un serveur Linux avec un utilisateur système capable de recevoir des e-mails, ce qui signifie qu’un MTA tel que Postfix ou Sendmail doit être installé sur le système. Sinon, fetchmail ne fonctionnera pas, car il essaie de transmettre les e-mails téléchargés à un MTA (Postfix, Sendmail, …), et le MTA livre les e-mails à la boîte aux lettres de l’utilisateur (vous pouvez configurer le système pour inclure le filtrage des spams et des virus dans ce processus, par exemple avec amavisd-new ou procmail, mais cela n’est pas couvert dans ce tutoriel).
J’utilise un système Debian dans ce tutoriel où deux utilisateurs appelés falko et till existent.
2 Installer fetchmail
Pour installer fetchmail, il suffit d’exécuter
apt install fetchmail
3 Configurer fetchmail
Il existe deux façons de configurer fetchmail. Nous pouvons le faire fonctionner en tant que démon avec un fichier de configuration global, ou nous pouvons créer un job cron pour exécuter fetchmail avec des fichiers de configuration par utilisateur. Je vais décrire les deux méthodes ici.
3.1 Exécuter fetchmail en tant que démon avec un fichier de configuration global
Pour faire fonctionner fetchmail en tant que démon, nous devons éditer /etc/default/fetchmail et définir START_DAEMON sur yes :
nano /etc/default/fetchmail
# Ce fichier sera utilisé pour déclarer certaines variables pour fetchmail # # Décommentez ce qui suit si vous ne voulez pas de messages de log localisés # export LC_ALL=C # Déclarez ici si nous voulons démarrer fetchmail. 'yes' ou 'no' START_DAEMON=yes
Ensuite, nous devons créer le fichier de configuration /etc/fetchmailrc car le démon fetchmail ne démarrera pas si ce fichier n’existe pas. Dans ce fichier, nous pouvons spécifier comment le démon fetchmail doit se comporter ainsi que les détails que fetchmail doit connaître pour récupérer des e-mails depuis des comptes de messagerie étrangers.
Supposons que falko ait deux comptes de messagerie dont nous voulons récupérer les e-mails :
- Premier compte : serveur pop.someprovider.tld, protocole POP3, nom d’utilisateur [email protected] (oui, le nom d’utilisateur est une adresse e-mail dans ce cas), mot de passe secret.
- Deuxième compte : serveur mail.otherprovider.tld, protocole POP3, nom d’utilisateur ftimme, mot de passe verysecurepassword.
till a un compte de messagerie :
- Serveur mailin.tillsprovider.tld, protocole POP3, nom d’utilisateur tbrehm, mot de passe iwonttellyou.
Ainsi, notre fichier /etc/fetchmailrc pourrait ressembler à ceci :
nano /etc/fetchmailrc
# /etc/fetchmailrc pour le mode démon global # Ce fichier doit avoir les permissions 0600, propriétaire fetchmail set daemon 300 # Pool toutes les 5 minutes set syslog # journaliser via le service syslog set postmaster root set no bouncemail # éviter la perte sur les erreurs 4xx # d'autre part, les erreurs 5xx deviennent # plus dangereuses... ########################################################################## # Hôtes à interroger ########################################################################## # Valeurs par défaut =============================================================== # Définir antispam à -1, car il est beaucoup plus sûr de l'utiliser avec # no bouncemail defaults: timeout 300 antispam -1 batchlimit 100 poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret" is falko here poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall poll mailin.tillsprovider.tld protocol POP3 user "tbrehm" there with password "iwonttellyou" is till here keep
Au début du fichier, nous avons quelques options globales telles que set daemon 300 (ce qui signifie que fetchmail doit récupérer des e-mails toutes les 300 secondes) qui contrôlent le fonctionnement du programme. Les significations des options ci-dessus sont les suivantes :
- set daemon : Définir un intervalle de sondage en arrière-plan en secondes.
- set syslog : Effectuer la journalisation des erreurs via syslog.
- set postmaster : Donner le nom du destinataire de dernier recours (par défaut : utilisateur exécutant fetchmail, “postmaster” s’il est exécuté par l’utilisateur root).
- set no bouncemail : Diriger le mail d’erreur vers le postmaster local (comme indiqué par l’option globale “postmaster” ci-dessus).
Ensuite, nous avons les options serveur et utilisateur. Celles-ci vont ensemble dans les lignes commençant par poll ; s’il y a des options qui sont les mêmes pour chaque ligne de sondage, nous pouvons également les spécifier avant les lignes de sondage dans une section qui commence par defaults : (comme timeout, antispam et batchlimit dans notre exemple).
- timeout : Délai d’inactivité du serveur en secondes (par défaut 300).
- antispam : Spécifier quels retours SMTP sont interprétés comme des blocs de politique anti-spam.
- batchlimit : Spécifier le nombre maximum de messages qui seront expédiés à un écouteur SMTP avant que la connexion ne soit délibérément interrompue et reconstruite (par défaut 0, ce qui signifie pas de limite).
Les lignes de sondage sont explicites ; comme vous le voyez, fetchmail récupère des e-mails de chacun des comptes de messagerie externes de falko et les place dans un seul compte.
Vous remarquerez que les lignes de sondage ont des terminaisons différentes (par exemple, nofetchall (par défaut), fetchall, keep, nokeep). Les significations sont les suivantes :
- nofetchall : Récupérer uniquement les nouveaux messages (par défaut). Si rien d’autre n’est spécifié (par exemple, fetchall, keep), cela signifie nofetchall.
- fetchall : Récupérer tous les messages, qu’ils aient été vus ou non.
- keep : Ne pas supprimer les messages vus du serveur.
- nokeep : Supprimer les messages vus du serveur.
Pour en savoir plus sur tous les paramètres de configuration disponibles, jetez un œil à
man fetchmail
/etc/fetchmailrc doit avoir des permissions 600 et doit être possédé par l’utilisateur fetchmail, donc nous faisons ce qui suit :
chmod 600 /etc/fetchmailrc chown fetchmail /etc/fetchmailrc
Enfin, nous pouvons démarrer fetchmail :
/etc/init.d/fetchmail start
Fetchmail devrait maintenant télécharger des e-mails et les placer dans les boîtes aux lettres de falko et till (en utilisant le MTA). Il répétera cela toutes les secondes définies par set daemon.
3.2 Utiliser des fichiers de configuration par utilisateur et exécuter fetchmail via Cron
Au lieu d’utiliser un fichier de configuration global comme montré dans le chapitre 3.1, nous pouvons utiliser des fichiers de configuration par utilisateur. Ceux-ci doivent avoir le nom .fetchmailrc et doivent être situés dans le répertoire personnel de l’utilisateur.
Nous voulons maintenant créer un tel fichier pour l’utilisateur falko. Assurez-vous que vous êtes connecté en tant que falko, pas root ! Ensuite, nous faisons ceci :
cd ~/ vi .fetchmailrc
set postmaster falko set bouncemail poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret" poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" fetchall
Le fichier ressemble beaucoup au fichier /etc/fetchmailrc du chapitre 3.1, cependant vous remarquerez que je n’utilise plus la phrase is falko here (comme .fetchmailrc est dans le répertoire personnel de falko, fetchmail sait que les e-mails doivent être livrés à falko). Bien sûr, vous pouvez toujours utiliser is falko here, donc le fichier pourrait également ressembler à ceci :
set postmaster falko set bouncemail poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret" is falko here poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall
Pour en savoir plus sur tous les paramètres de configuration disponibles, jetez un œil à
man fetchmail
.fetchmailrc doit avoir des permissions 600, de sorte que seul falko puisse lire/écrire :
chmod 600 ~/.fetchmailrc
C’est tout. Maintenant, falko peut démarrer le processus de récupération en exécutant
fetchmail
ou
fetchmail -v
ce qui montre ce qui se passe.
Bien sûr, falko ne veut pas démarrer la récupération manuellement toutes les quelques minutes, donc nous créons un job cron pour lui. Toujours en tant qu’utilisateur falko, nous exécutons
crontab -e et créons un job cron comme celui-ci (qui démarrerait fetchmail toutes les cinq minutes) :
*/5 * * * * /usr/bin/fetchmail &> /dev/null
4 Liens
- Debian: http://www.debian.org
- Fetchmail: http://fetchmail.berlios.de
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.