Développement et bases de données

Supprimer automatiquement les anciens e-mails dans cPanel

Vérifié le 6 min de lecture espace de messagerie cron

La messagerie est généralement ce qui accumule le plus d'espace sur un hébergement. Pour éviter qu'elle grossisse sans contrôle, vous pouvez supprimer automatiquement les e-mails plus anciens qu'un certain nombre de jours, par exemple ceux de plus de 60 jours.

Vous pourriez le faire avec une règle dans Outlook ou Thunderbird, mais cela ne fonctionne pas si le courrier est lu depuis le mobile ou le webmail, et dans une entreprise avec de nombreux comptes, mieux vaut ne pas dépendre de la bonne configuration des règles par chaque utilisateur. Avec une tâche cron dans cPanel, c'est vous qui contrôlez, pour tous les comptes que vous voulez.

Les e-mails sont supprimés définitivement : ils ne passent pas par la Corbeille. Si un compte contient du courrier à conserver, enregistrez-le d'abord (voyez télécharger la messagerie sur l'ordinateur) ou excluez-le.

Tester d'abord à la main

cPanel dispose d'un outil pour faire le même nettoyage une fois : dans E-mail > Email Disk Usage, choisissez le compte, le dossier et l'une des options de suppression, comme les messages de plus d'un an. Utilisez-le si vous avez seulement besoin de libérer de l'espace ponctuellement.

Pour l'automatiser, nous utilisons le même mécanisme depuis l'API de cPanel, avec la commande uapi. Il vous faut un accès SSH pour le tester, ou le terminal de cPanel.

Supprimer les anciens e-mails d'un compte

Cette commande supprime de la boîte de réception de usuario@ejemplo.com les e-mails reçus il y a plus de 60 jours :

uapi Mailboxes expunge_mailbox_messages account='usuario@ejemplo.com' mailbox='INBOX' query='savedbefore 60d'
  • account : l'adresse e-mail.

  • mailbox : le dossier. INBOX est la boîte de réception ; les autres s'appellent INBOX.Sent (Envoyés), INBOX.Trash (Corbeille), INBOX.spam… Pour voir les noms exacts d'un compte :

    uapi Mailboxes get_mailbox_status_list account='usuario@ejemplo.com'
    
  • query : quels e-mails sont supprimés. savedbefore 60d désigne ceux arrivés sur le serveur il y a plus de 60 jours. Remplacez le nombre par le nombre de jours à conserver ; les semaines sont aussi acceptées, comme savedbefore 8w.

Si la réponse contient status: 1, l'opération est faite. Vérifiez dans le webmail que seuls les anciens e-mails ont disparu.

Si vous voulez aussi nettoyer Envoyés ou la Corbeille, répétez la commande avec leur dossier.

Tous les comptes d'un domaine ou de tout l'hébergement

Créez un script qui parcourt les comptes. Dans le gestionnaire de fichiers ou en SSH, créez le fichier /home/usuario_cpanel/purgar-correo.sh (hors de public_html) avec ce contenu :

#!/bin/bash
# Nombre de jours de courrier conservés
DIAS=60
# Domaine à nettoyer. Laissez vide ("") pour tous les comptes de l'hébergement
DOMINIO="ejemplo.com"

for cuenta in $(uapi Email list_pops | awk '/email:/ {print $2}' | grep "@${DOMINIO}"); do
  uapi Mailboxes expunge_mailbox_messages account="$cuenta" mailbox='INBOX' query="savedbefore ${DIAS}d" >/dev/null
done

Remplacez usuario_cpanel par votre utilisateur cPanel, et DIAS et DOMINIO par vos valeurs. Si un compte ne doit pas être touché, excluez-le en ajoutant | grep -v 'jefe@ejemplo.com' à la fin du grep de la ligne for.

Exécutez-le une fois à la main pour vérifier qu'il fait ce que vous attendez :

bash /home/usuario_cpanel/purgar-correo.sh

Le programmer chaque jour

Enfin, créez une tâche cron dans cPanel qui l'exécute une fois par jour, en pleine nuit :

  • Paramètres courants : Une fois par jour (0 0 * * *). Changez de préférence la minute et l'heure pour quelque chose comme 17 4 * * *, afin de ne pas coïncider avec d'autres tâches.
  • Commande :
/bin/bash /home/usuario_cpanel/purgar-correo.sh >/dev/null 2>&1

Dès lors, les e-mails qui dépassent l'ancienneté fixée seront supprimés chaque jour. L'espace libéré apparaît dans cPanel lorsque le calcul de l'utilisation du disque est mis à jour, ce qui peut prendre quelques heures.

Si rien n'est supprimé

  • Le compte doit exister exactement sous ce nom : vérifiez-le avec uapi Email list_pops.
  • Vérifiez le nom du dossier avec get_mailbox_status_list.
  • Si le courrier a été importé depuis un autre serveur (par exemple avec imapsync), la date d'« enregistrement » est celle de l'importation, et non celle de l'e-mail d'origine. Dans ce cas, utilisez before 60d (date de réception, qu'imapsync conserve) ou sentbefore 60d (date inscrite dans le message lui-même).

Cela peut aussi vous aider

Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.