dmesg.fr:~#

display message

curl - xmllint - imap : interroger lire rapatrier manipuler des mails gmail via un shell bash en ligne de commande

logo gmail terminalIl peut être utile d'interroger une boite gmail via un terminal Linux en ligne de commande.

Voici comme lire des mails, marquer comme lu, télécharger les messages, savoir si vous avez des nouveaux messages, interroger la boite mail via un client de messagerie dans un terminal.



Paramétrage du compte gmail

Avant de commencer à interroger une boite gmail en ligne de commande, vous devez :

1) Activer IMAP

Allez dans les paramètres gmail, cliquez sur "Transfert et POP/IMAP". Dans "Accès IMAP", cliquez sur "Activer IMAP".


2) Autoriser l'accès aux applications moins sécurisées :

https://www.google.com/settings/security/lesssecureapps

Cliquez sur "Activer"

Vérifiez aussi que les port 443 et 993 soient ouverts.


Interroger une boite gmail via le client de messagerie Mutt

Installez Mutt :

apt-get install mutt


Configuration de Mutt pour un compte gmail :

Créez le fichier de configuration suivant :

# configuration imap
set spoolfile=imaps://imap.gmail.com:993/INBOX
set imap_user = "Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser."
set imap_pass = "votre_mot_de_passe_gmail"
set imap_passive="no"
set imap_check_subscribed="yes"
set imap_list_subscribed="yes"

et sauvegardez-le par exemple sous le nom .muttgmail


Interrogation de la boite gmail :

Lancez Mutt avec le fichier de configuration que vous venez de créer :

mutt -F .muttgmail


Vous obtenez la liste des mails dans votre boite de réception.

Pour l'utilisation de Mutt, reportez-vous à sa documentation, ou faites une petite recherche google :-)


Mails gmail avec curl et atom


Note : avant de continuer

Les variables ci-dessous doivent être renseignées :

monuser : votre identifiant gmail
monmdp : votre mot de passe gmail


Vérifier le nombre de nouveaux messages / messages non lus avec curl

Tapez :

curl -f -u $monuser:$monmdp --silent "https://mail.google.com/mail/feed/atom" |  grep -oPm1 "(?<=<fullcount>)[^<]+"


Afficher les sujets des nouveaux messages / messages non lus avec curl

Tapez :

curl -u $monuser:$monmdp --silent "https://mail.google.com/mail/feed/atom" |  grep -oPm1 "(?<=<title>)[^<]+" | sed '1d'


Lister les nouveaux messages / messages non lus avec curl

Tapez :

curl -u $monuser:$monmdp --silent "https://mail.google.com/mail/feed/atom"


L'affichage se fait au format XML. Vous pouvez facilement rediriger le sortie écran vers un fichier :

curl -u $monuser:$monmdp --silent "https://mail.google.com/mail/feed/atom" > mes_mails_non_lus.xml



Manipulation du fichier XML généré par curl avec xmllint


Formattage du fichier XML généré par curl

Installez le paquet libxml2-utils :

apt-get install libxml2-utils


Effectuez une mise en forme du fichier mes_mails_non_lus.xml précédemment généré avec curl :

cat mes_mails_non_lus.xml | xmllint --format - > mes_mails_non_lus_formatte.xml


Editez le fichier mes_mails_non_lus_formatte.xml qui vient d'être généré :

- supprimez les 3 lignes commencant par :

<?xml
<feed
</feed>

- ajoutez une ligne <xml> en début de fichier

- ajoutez une ligne </xml> en fin de fichier


Afficher les balises <title> et leur contenu :

xmllint --xpath "/xml/entry/title" mes_mails_non_lus_formatte.xml

Si vous obtenez l'erreur "XPath set is empty", soit il n'y a pas de balise <title> dans le fichier XML, soit le fichier XML est mal formatté.


Afficher les balises <email> et leur contenu :

xmllint --xpath "/xml/entry/author/email" mes_mails_non_lus_formatte.xml


Rechercher le nombre d'occurences title :

xmllint --xpath 'count(/xml/entry/title)' mes_mails_non_lus_formatte.xml


Afficher le mail le plus récent non lu :

xmllint --xpath '/xml/entry[1]' mes_mails_non_lus_formatte.xml


Afficher le contenu de <title> sans les balises :

xmllint --xpath "/xml/entry/title/text()" mes_mails_non_lus_formatte.xml



Mails gmail avec curl et imap

Jusqu'à présent, nous utilisions curl et le fil atom gmail via le port 443 afin d'accéder aux mails non lus. Nous allons maintenant accéder à l'ensemble de la boite gmail via le protocole imap et le port 993.


Lister les dossiers mails :

curl --insecure --url "imaps://imap.gmail.com/" --user "$monuser:$monmdp"


Analyser le dossier INBOX :

curl --insecure --url "imaps://imap.gmail.com/" --user "$monuser:$monmdp" -X "EXAMINE INBOX"

Exemple de résultat :

* FLAGS (\Answered \Flagged \Draft \Deleted \Seen $NotPhishing $Phishing)
* OK [PERMANENTFLAGS ()] Flags permitted.
* OK [UIDVALIDITY 1] UIDs valid.
* 3193 EXISTS
* 0 RECENT
* OK [UIDNEXT 31170] Predicted next UID.
* OK [HIGHESTMODSEQ 3525410]


Afficher le message le plus récent par rapport à l'exemple ci-dessus :

curl --insecure --url "imaps://imap.gmail.com/INBOX;UID=3193" --user "$monuser:$monmdp"

Note : si ce message était non lu, il sera marqué comme lu

S'il existe 5000 messages dans votre boite de réception, le message 5000 sera le plus récent, et le message 1 sera le plus ancien.


Supprimer le message 3193 :

curl --insecure --url "imaps://imap.gmail.com/INBOX" --user "$monuser:$monmdp" -X "STORE 3193 +Flags \Deleted"


Liens

Mutt

Curl et imap

xmllint


Copyright dmesg.fr - All Rights Reserved.