Blog Marcel

( Free software adventures )

Goobook, l'ami de Mutt, imap et Gmail

Rédigé par PPmarcel - 23 août 2010 - 7 commentaires


Depuis que mutt gère l'imap, il est possible de gérer plus facilement sa boite mail Gmail. Personnellement j'utilise une configuration calquée sur celle de Lefinois.

Par la suite, il est possible de se connecter à sa boite email en imaps et envoyer des emails via smtps (Secure, s'il vous plait). En outre, si peu que vous ayez mis un système de tris basé sur des labels, mutt le verra comme différentes mailbox et vous retrouverez votre petit organisation.

Maintenant, un élément important qui manquait était la gestion des contacts, qui ne sont pas importés avec l'imap (pas avec mutt tout du moins). Qu'importe, Goobook est là maintenant!


Goobook, qu'est-ce que c'est?

Il s'agit d'une application en python s'appuyant sur la librairie gdata. Son but est d'authoriser la manipulation de sa liste de contacts gmail via des lignes de commande, ou depuis un MUA tel que mutt.

En pratique, Goobook permet de récupérer la liste des contacts en local et d'y rechercher des adresses emails. Il autorise aussi la création de nouveaux contacts sur son compte Google, mais pas la destruction.

Goobook est la pièce qui manquait à mutt: tous vos contacts Gmails sont maintenant à portée de main.


L'installation

Utilisateurs de Archlinux, vous trouverez une version récente dans vos dépot AUR (goobook-git). Pour les autres, vous pouvez installer la dernière verison stable:
$ wget http://pypi.python.org/packages/source/g/goobook/goobook-1.3.tar.gz
$ tar -xzvf goobook-*.tar.gz 
$ cd goobook-*
$ sudo python ./setup.py install

La configuration

La configuration consiste en un petit fichier '.goobookrc' dans le home. Il peut être configuré ainsi:
[DEFAULT]
email: user@gmail.com
password: secret
# The following are optional, defaults are shown
;cache_filename: ~/.goobook_cache
cache_expiry_hours: 2400
Le problème évident est d'avoir son mot de passe Gmail écrit en dur dans un fichier.
La solution la plus simple est ici d'indiquer le mot de passe "prompt", ce qui signifie qu'on vous demandera votre mot de passe à chaque opération. Vous n'aurez pas besoin de le faire souvent, rassurez-vous.


Les commandes de goobook

Il y en a 3 importantes: reload, query et add.

Reload va vous permettre de récupérer la liste des contacts Gmail vers le fichier .goobook_cache. Ainsi, mutt trouvera le fichier et pourra alors rechercher directement les adresses email dans ce fichier.
$ goobook reload
Effectuez le rechargement dès maintenant, pour éviter des problèmes ultérieurs.

Query est la fonction de recherche. Il vous suffit d'indiquer quelques caractères pour que goobook recherche les emails susceptibles de correspondre.
$ goobook query gnagna
Add va vous permettre d'ajouter une adresse email dans vos contacts Gmail et dans le goobook_cache.
$ goobook add "nom prénom ou blablabla" adresse@email.truc

L'intégration de la recherche dans Mutt

Pour rechercher un contact depuis la liste téléchargée par Goobook, insérez ces lignes dans votre muttrc :
# Lecture des contacts gmail (goobook)
set query_command="goobook query '%s'"
bind editor <Tab> complete-query
Ainsi lorsque vous aurez à saisir une adresse email, tapez quelques lettres qui la composent suivi d'une tabulation. Vous aurez alors la liste des contacts contenants la suite de caractères.



L'ajout de contacts depuis mutt

Que vous ayez choisi de renseigner votre mot de passe ou "prompt" dans le goobookrc va influencer votre manière de faire.

Vous aviez indiqué votre mot de passe

A ce moment là, vous pouvez ajouter une simple macro à votre muttrc. Elle remplacera l'ajout d'alias de mutt au profit de goobook, en pressant la touche "a":
macro index,pager a "goobook add" "add the sender address to Google contacts"

Vous aviez indiqué "prompt"

Dans ce cas, l'ajout d'un contact risque de provoquer un demande d'un mot de passe, ce qui plantera l'interface de mutt.
Dans un premier temps, je vous propose donc d'utiliser le système d'alias de mutt. Tout d'abord, ajoutez la gestion des alias dans le muttrc:
 # Création des alias
set alias_file="~/.mutt_alias"
Lorsque vous aurez enregistré de nouveaux contacts avec mutt, exportez-les ultérieurement en appelant ce script de temps en temps:
# touch /usr/local/bin/alias2goobook
# chmod 755 /usr/local/bin/alias2goobook
# vi /usr/local/bin/alias2goobook
#!/bin/bash
#
# Exporter une liste d'alias crée par mutt vers les contacts gmail en utilisant goobook.
# La syntaxe de mutt est du type: alias nom prenom 
# La syntaxe de goobook est du type: "nom prenom" "adresse@email.truc"

# A modifier en fonction de vos reglages
alias=~/.mutt_alias

# Pour chaque ligne du fichier alias, effectuer l'action suivante
cat $alias | while read ligne
do
    # Remise en forme
    nom_prenom=`echo $ligne | sed "s/alias\ \(.*\)\ <.*/\1/"`
    email=`echo $ligne | sed "s/.*<\(.*\)>/\1/"`
    goobook add  "$nom_prenom" "$email"
done

echo '' > $alias

goobook reload
L'appel du script est facile, si /usr/local/bin est dans votre $PATH.
$ alias2goobook

Le mot de la fin

Et voilà. Avec la gestion des contacts, mutt devient carrément plus pratique lorsqu'il est utilisé avec Gmail.
Au niveau du script de transfert, je ne suis pas parvenu à prendre le mot de passe de Gmail une fois pour toute, afin d'éviter qu'on vous le demande pour chaque alias exporté. Si certains veulent s'y pencher, j'ai un début de solution à base de "expect".

7 commentaires

#1 mardi 24 août 2010 @ 13:02 Clément a dit :

Apparemment pluxml a fait sauter le <Tab> dans la ligne à mettre dans le .muttrc

bind editor <Tab> complete-query

Tout marche très bien à part ça.

#2 mardi 24 août 2010 @ 13:08 PPmarcel a dit :

Ok, c'est corrigé.

#3 mardi 24 août 2010 @ 15:07 rcspams a dit :

Y a t il un pb pour atteindre le serveur http://pypi.python.org ?
Lors de l'installation le script n'arrive pas à télécharger les dépendances !!

#4 mardi 24 août 2010 @ 21:14 PPmarcel a dit :

Je n'ai pas de problème pour l'atteindre. Retire le #md5 à la fin du lien peut-être (je viens de le reirer dans le billet).
En ce qui concerne les dépendances, peut-être qu'il te manque python-gdata. Tiens moi au courant si ça marche ou échoue.

#5 mercredi 17 novembre 2010 @ 22:17 Pinkilla a dit :

Mmh interessant ... je prend de suite. C'est une feature qui me manquait. Merci.

#6 lundi 18 juillet 2011 @ 10:21 Christophe a dit :

@PPmarcel

Oui mais je n’arrive à rien avec goobook.

Traceback (most recent call last):
File « /usr/local/bin/goobook », line 9, in
load_entry_point(‘goobook==1.3′, ‘console_scripts’, ‘goobook’)()
File « /usr/local/lib/python2.6/dist-packages/goobook-1.3-py2.6.egg/goobook/application.py », line 87, in main
args.func(config, args)
File « /usr/local/lib/python2.6/dist-packages/goobook-1.3-py2.6.egg/goobook/application.py », line 119, in do_reload
cache.load(force_update=True)
File « /usr/local/lib/python2.6/dist-packages/goobook-1.3-py2.6.egg/goobook/goobook.py », line 184, in load
self.update()
File « /usr/local/lib/python2.6/dist-packages/goobook-1.3-py2.6.egg/goobook/goobook.py », line 190, in update
gc = GoogleContacts(self.__config)
File « /usr/local/lib/python2.6/dist-packages/goobook-1.3-py2.6.egg/goobook/goobook.py », line 247, in __init__
self.__client = self.__get_client(config.password())
File « /usr/local/lib/python2.6/dist-packages/goobook-1.3-py2.6.egg/goobook/goobook.py », line 254, in __get_client
raise Exception(« ERROR: Missing email or password ») # TODO
Exception: ERROR: Missing email or password

J’ai bien un goobookrc (sans . ?) @home, correctement (?) renseigné.

#7 mardi 19 juillet 2011 @ 17:48 PPmarcel a dit :

Oui c'était ça, le fichier goobookrc commence bien par un point. J'ai omis de le mentionner par erreur dans le billet.

C'est corrigé maintenant. ;)

Écrire un commentaire

Quelle est la quatrième lettre du mot errbr ? :