Une bizarrerie dans Gmail

J’ai activé l’IMAP4 au niveau de ma boîte Gmail, de manière à pouvoir nettoyer par un script PHP les mails présents dans les dossiers de la corbeille, des spams, des messages envoyés et de tous les messages.

Nettoyer votre boîte Gmail par script PHP

Le script PHP nettoie les dossiers :

La particularité de Google est de laisser vos messages envoyés sur le serveur, même si vous utilisez un client lourd de messagerie. Ce n’est pas le cas de Free, par exemple !

<?php
	$mboxes=array('Trash','[Gmail]/Corbeille','[Gmail]/Spam','[Gmail]/Tous les messages','[Gmail]/Messages envoy&AOk-s');
	foreach($mboxes as $mbox)
	{
		$stream = imap_open('{imap.gmail.com:993/imap/ssl}'.$mbox, 'votre_login','votre_mot_de_passe');
		$msgs=imap_num_msg($stream);
		if($msg)
		{
			for($i=1;$i<=$msgs;$i++)
			{
				imap_delete($stream,$i);
			}
			imap_expunge($stream);
		}
		imap_close($stream);
	}
?>

Grosse surprise

Et là, malgré l’exécution de mon script PHP, les fichiers censés avoir été nettoyés dans le dossier « Tous les messages » restent présents dans l’interface Web de Gmail. Je ne vois pas bien comment effacer le contenu de ce dossier, en dehors de l’exécution d’un script CURL.

Une bizarrerie dans Gmail

Messagerie  / Gmail IMAP 

Commentaires

Le support de IMAP par Gmail est un peu spécifique: les dossiers sont en fait des dossiers virtuels. Ils sont basés sur les tags utilisateurs ou mappent des dossiers fonctionnels. De ce fait pour effectuer ce genre de manip, je préfère m’appuyer sur les outils et APIs Google, et ici en particulier sur l’environnement de script (Apps Script) https://script.google.com/home

Voici un lien public vers mon script pour avoir une idée de ce que ça donne: https://script.google.com/d/1wqrdze9EzOzRk3EaKGe_0u4es0pYJTi5qkT0gmTqsc39-py5QF8CBqSl/edit?usp=sharing

Ces scripts peuvent programmés de façon assez fine (par l’intermédiaire de « déclencheurs »)

@Gilles

Le dossier « Tous les messages » n’est pas un dossier « utilisateur ». Il n’y a aucune possibilité de le supprimer. Quant à son effacement, il ne peut se faire qu’à partir de l’interface Web.Il conserve tous les messages qui ont été envoyés soit à partir de l’interface Web soit à partir du SMTP utilisé dans un client lourd, même après avoir effacé le contenu du dossier « Messages Envoyés ».

@Denis
Le dossier « tous les messages » ne fait pas exception, c’est lui aussi un dossier virtuel qui correspond au pseudo-tag « ALL » (label:all). Et en effet on ne peut pas le supprimer. Ce tag recouvre *tous* les messages sans exception, y compris la corbeille (« label:trash »).
De même le dossier « boite de réception » correspond aux messages qui ont le tag « INBOX » (« label:inbox »)
Dans le cas de Gmail, la fonction imap:delete appliquée à un message accédé via un dossier revient à supprimer le tag associé au dossier pour le message en question.
Plus de détails ici:
https://techjourney.net/how-to-delete-emails-from-gmail-imap-access-mail-client/

A noter que mon but était surtout de conseiller l’approche Apps Script que je trouve plus appropriée dans le cas de Gmail dont l’implémentation de IMAP est à mon sens plus une émulation qu’une implémentation native.
Le fait que ces scripts puissent s’exécuter automatiquement et indépendamment de tout client connecté est à mon avis très pratique.

NB: dommage de ne pas pouvoir être prévenu des réponses à ses commentaires ici.

@Gilles

Je n’ai pas compris où ils étaient exécutés. Selon quelles modalités ?

@Denis: Les scripts s’exécutent dans le cloud Google.
Pour avoir une idée des principes le mieux est de commencer ici: https://developers.google.com/apps-script/

@Gilles

Et comment les planifier ?

@Denis:
A nouveau désolé pour la réponse tardive, je n’ai pas de moyen simple d’être notifié.

>> comment les planifier ?
* En mode édition de script, utiliser le menu « edition » -> « déclencheurs du projet actuel »
https://i.imgur.com/sXJXW51.png

puis « ajouter un déclencheur » et là, renseigner le formulaire, et particulier
* « Choisir la fonction à exécuter »
** et en face de « Sélectionnez la source de l’événement » choisir « déclencheur horaire »
Voici ce que ça donne pour l’un de mes scripts:
https://i.imgur.com/fXQWWtQ.png

Laisser un commentaire

(requis)

(requis)