Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Software-soft message-gnus


Lire ses courrier avec Gnus

Lire ses courrier avec Gnus
Emacs is not built by hate of vi. vi is irrelevant. It is no more then a strange punishment that the unbelievers submit themselves to
Accessoirement, on ne peut lire ses courriels avec un gnus sous vi.

Pourquoi gnus ?

Gnus est un lecteur de newsgroups (quel anglicisme horrible !) qui est fournit avec GNU Emacs. Il peut aussi servir de lecteur de courriel. Les avantages que j'y trouve sont les suivants :

  • même comportement du lecteur de courriel en mode graphique et mode texte
  • extensible...

Prérequis

Evidemment, il est de bon goût d'avoir Emacs installé sur son ordinateur. Il est aussi préférable d'être un peu familier avec Emacs. Nous allons aussi faire usage de procmail et fetchmail, matériel qui devrait être présent sur tout GNU/Linux décent.

L'épreuve demande un peu de tenacité. Mais ça doit être jouable.

Restez loggué et faites toutes les manips avec votre utilisateur normal (sauf précision contraire).

Télécharger les courriers

Vous êtes en train de le comprendre : Emacs ne va pas télécharger vos courriers, nous allons faire appel à fetchmail (télécharge) et procmail (distribue). Autant laisser faire chaque outil ce qu'il fait parfaitement. Cela vous permettra d'utiliser votre conf fetchmail et procmail avec d'autres lecteurs de courriel, si une folle envie vous en prennait.

Le .forward

Ce fichier définit qui doit gérer la redistribution de courrier arrivé en local pour l'utilisateur. Tapez ce qui suit, cela suffira :

echo "|/usr/bin/procmail" > ~/.forward

Le .procmailrc

Premièrement, il faut créer un dossier où procmail stockera les courriers arrivés, dans différents fichiers selon la configuration. Ici, il s'agit de ~/.mail-gnus

mkdir ~/.mail-gnus

Ensuite, il faut créer un fichier ~/.procmailrc de configuration comme celui-ci :

PATH=/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/.mail-gnus # You'd better make sure it exists
DEFAULT=$MAILDIR/inbox
LOGFILE=$HOME/.from_procmail
LOCKFILE=$HOME/.lockmail
# Tout les courriers venant ou allant vers une adresse chez gnu.org
# sont posés dans une boîte appellée gnu-devel.
:0
* ^[From|To|Cc].*@gnu.org
gnu-devel
# Tout les autres courriers iront dans $DEFAULT,
# c'est-à-dire inbox.

Le .fetchmailrc

Après avoir configuré la redistribution de courrier en local, nous allons maintenant configurer le téléchargement de courrier.

Voici un exemple pour un compte pop3. Il faut bien entendu substituer moa par l'utilisateur local destinataire, yeupou par le login free.fr et nibelungen par le nom de la machine hôte (hostname quoi).

# Général
set syslog
set bouncemail
set no spambounce
set properties ""
# Chaque compte sur chaque serveur
poll pop.free.fr with proto POP3
        user 'yeupou' there with password 'xxx' is 'moa@nibelungen' here

Ensuite, il faudrait que fetchmail tourne en démon. La commande suivante devrait faire l'affaire :

fetchmail -d60 --fetchmailrc /home/moa/.fetchmailrc --norewrite

L'idéal est d'avoir ce démon au démarrage de la machine (ajoutez cette ligne dans /etc/rc.local) ou lors de votre login (ajoutez cette ligne dans le fichier qui gère votre session - par exemple ~/.Xclients ou ~/.xinitrc).

Si fetchmail tourne et que vous avez reçu du courrier, alors il devrait se trouver dans un (ou des) fichier(s) dans le dossier ~/.mails-gnus

Adapter son .emacs

Nous allons maintenant signaler à Emacs l'existence de gnus. Il suffit de copier-coller ce qui suit dans votre ~/.emacs.

 ;; Definit Gnus comme lecteur courriel
(custom-set-variables
 '(read-mail-command (quote gnus))
 '(message-directory "~/.Mail/"))
;; Definit Galeon comme brouteur web, pour suivre les liens
(setq browse-url-browser-function 'browse-url-generic
      browse-url-generic-program "galeon")

Créer son .gnus

Et nous sommes maintenant dans le vif du sujet, la configuration de gnus. Tout ce qui suit doit être ajouté dans le fichier ~/.gnus

Identité

Corrigez nom et adresse courriel.

 ;;**** BASIC IDENTITY
(setq user-full-name "Votre Nom"
      user-mail-address "votre@courriel.org"
      mail-user-agent (quote message-user-agent))
;; Def charset
(setq gnus-default-charset (quote iso-8859-15)
      gnus-default-posting-charset (quote iso-8859-15))
(message "gnus.el: BASIC IDENTITY initialized")

Arrivée du courrier

Rien à changer si vous avez suivi ce qui précède.

 ;;*******************
;;***** GETTING MAILS
;; In mail-source, procmail store files that
;; We store mails here - this is also defined in my .emacs,
;; it's the only way I found to avoid apparition of ~/Mail/.
(setq gnus-directory "~/.News/")
(setq message-directory "~/.Mail/")
;; fetchmail previously downloaded.
(setq mail-sources
      (list '(directory
              :path "~/.mail-gnus/"
              :suffix ""
       ))
      )
;; We choose nnml: everybody says it's the fastest backend on earth.
;; GNUS est avant tout un lecteur de news, autant ne pas s'en priver
(setq gnus-select-method '(nntp "news.free.fr"))
;;veillez à changer le nom du serveur de news de votre FAI
;; et pour les mails
(add-to-list 'gnus-secondary-select-methods '(nnml ""))  


;; We trash duplicates mails.
(setq nnmail-treat-duplicates 'delete)
;; We just read mail, no newsgroups.
(setq gnus-check-new-newsgroups t)
(message "gnus.el: GETTING MAILS initialized")

Mime Types

Rien à changer si vous avez suivi ce qui précède. Je ne pourrais pas vous donner de détails à ce propos, que je n'ai fait que copier-coller à partir d'un autre .emacs (mais ça marche bien).

 ;;************************
;; MIME Settings for PGnus
(require 'mm-util)
(defun mm-read-charset (prompt)
  "Return a charset."
  'iso-8859-15)
(setq gnus-default-posting-charset (quote iso-8859-15))
(setq gnus-article-decode-mime-words t)
(setq gnus-article-decode-charset 1)
(setq gnus-mime-view-all-parts t) ; View all the MIME parts in current article
(setq gnus-ignored-mime-types
      '("text/x-vcard"))
(setq gnus-unbuttonized-mime-types nil) ; MIME type -> no buttons when rendered
(setq
 ;; Add buttons
 gnus-treat-buttonize t
 ;; Add buttons to the head
 gnus-treat-buttonize-head 'head
 ;; Emphasize text
 gnus-treat-emphasize t
 ;; Fill the article
 gnus-treat-fill-article nil
 ;; Remove carriage returns
 gnus-treat-strip-cr 'last
 ;; Hide headers
 gnus-treat-hide-headers 'head
 ;; Hide boring headers
 gnus-treat-hide-boring-headers 'head
 ;; Hide the signature
 gnus-treat-hide-signature nil
 ;; Hide cited text
 gnus-treat-hide-citation nil
 ;; Strip PGP signatures
 gnus-treat-strip-pgp 'last
 ;; Strip PEM signatures
 gnus-treat-strip-pem 'last
 ;; Highlight the headers
 gnus-treat-highlight-headers 'head
 ;; Highlight cited text
 gnus-treat-highlight-citation 'last
 ;; Highlight the signature
 gnus-treat-highlight-signature 'last
 ;; Display the Date in UT (GMT)
 gnus-treat-date-ut nil
 ;; Display the Date in the local timezone
 gnus-treat-date-local nil
 ;; Display the date in the original timezone
 gnus-treat-date-original nil
 ;; Strip trailing blank lines
 gnus-treat-strip-trailing-blank-lines 'last
 ;; Strip leading blank lines
 gnus-treat-strip-leading-blank-lines 'last
 ;; Strip multiple blank lines
 gnus-treat-strip-multiple-blank-lines 'last
 ;; Strip all blank lines
 ;; gnus-treat-strip-blank-lines nil
 ;; Treat overstrike highlighting
 gnus-treat-overstrike 'last
 )
;;* show the text/plain part before the text/html part in multpart/alternative
(require 'mm-decode)
;;;-- no way do compile with this
;;;--(push "text/plain" mm-alternative-precedence)
;;;--(setq mm-alternative-precedence "text/plain")
(message "gnus.el: MIME initialized")

Archives

Rien à changer si vous avez suivi ce qui précède. Je ne pourrais pas vous donner de détails à ce propos, que je n'ai fait que copier-coller à partir d'un autre .emacs (mais ça marche bien).

 ;;***********************
;; ARCHIVES: one file per month
(setq gnus-message-archive-group
      '((if (message-news-p)
            "misc-news"
          (concat "mail." (format-time-string
                           "%Y-%m" (current-time)))))
      )
(message "gnus.el: ARCHIVES initialized")

Interface

Rien à changer si vous avez suivi ce qui précède. Logiquement ça marche, lisez les commentaires pour personnaliser.

 ;;***********************
;;************* INTERFACE
;; Here I define how to display subject lines etc...
;; I wanna see thoses groups everytime
(setq gnus-permanently-visible-groups
"^nnml\\|^nnfolder\\|^inbox\\|^gnu-devel\\|^savannah-hackers\\|^trash")
;; I like it verbose
(setq gnus-verbose 2000)
;; I wanna be able to access my previous post
(setq gnus-fetch-old-headers t)
;; I wanna keep track of the last time I rode a group
(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
;; *Group* buffer: how to format each group entry.
(setq gnus-group-line-format
"%M%m %4N/%4t non-lus: %(%-20,20g%) depuis le %2,2~(cut 6)\
d/%2,2~(cut 4)d à %2,2~(cut 9)dh%2,2~(cut 11)d\n"
      ;;
      ;; %var details C-h i
      ;;`M' An asterisk if the group only has marked articles.
      ;;'N' Number of unread articles.
      ;;`t' Estimated total number of articles.
      ;;`G' Group name.
      ;;`D' Newsgroup description.
      ;;`m' `%' (`gnus-new-mail-mark') if there has arrived new mail to the
      ;;    group lately.
      ;;`D' Last time the group as been accessed.
      ;;
      ;; For the record, a default group line format
      ;;(setq gnus-group-line-format "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
      )
;; *Summary*: how to format each mail entry.
(setq gnus-summary-line-format
"%-1R %-1U  %-15,15n | %2,2~(cut 6)o/%2,2~(cut 4)o %2,2~(cut 9)oh%2,2~(cut 11)\
o | %I%(%0,40s%)\n"
      gnus-summary-same-subject ">>>"
      gnus-summary-mode-line-format "%V: %%b"
      ;; %var details C-h i
      ;; `s' Subject if the article is the root of the thread or the previous
      ;;     article had a different subject, `gnus-summary-same-subject'
      ;;     otherwise.  (`gnus-summary-same-subject' defaults to `""'.)
      ;; `n' The name (from the `From' header).
      ;; `L' Number of lines in the article.
      ;; `I' Indentation based on thread level (*note Customizing Threading::).
      ;; `>' One space for each thread level.
      ;; `<' Twenty minus thread level spaces.
      ;; `U' Unread.
      ;; `R' This misleadingly named specifier is the "secondary mark".  This
      ;;     mark will say whether the article has been replied to, has been
      ;;     cached, or has been saved.
      ;; `D'  `Date'.
      ;; `d'  The `Date' in `DD-MMM' format.
      ;;`o'     The `Date' in YYYYMMDD`T'HHMMSS format.
      ;;
      ;; For the record the default string is
      ;; `%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n'.
      )
;; I remove mailing list identifiers for mail from list I read often, that
;; are already stored in a particular directory
(setq gnus-list-identifiers 
      '(  "\\[savannah-hackers\\]"
  "\\[savannah-dev\\]" 
  ))
;; I do not like graphics smileys.
(setq gnus-treat-display-smileys nil)
;; I wanna particular dimensions while reading mails
(setq 
 gnus-build-sparse-threads 'some
 gnus-use-trees t
 gnus-generate-tree-function 'gnus-generate-horizontal-tree
 gnus-tree-minimize-window nil)
(if  (or (not (getenv "DISPLAY"))
         (string-match ":0" (getenv "DISPLAY")))
    (progn
      (gnus-add-configuration  
       '(article
         (vertical 1.0
                   (summary 0.40 point)
                   (article 1.0)
                   )
         )))
  (progn
    (gnus-add-configuration
     '(article
       (vertical 1.0
   (summary 0.40 point)
   (article 1.0)
   )
       )))
  )
(setq font-lock-maximum-decoration t
      font-lock-maximum-size nil)
(require 'font-lock)
(set-face-foreground 'gnus-summary-normal-ticked-face "pale violet red")
(set-face-foreground 'gnus-summary-high-ticked-face "pale violet red")
(message "gnus.el: INTERFACE initialized")

Réponses

Corrigez nom et adresse courriel.

 ; Hey, please remove my address from To: and Ccc: while I do a
;; wide reply.
;; seen at http://www.gnusfr.org/gen.php3/2002/04/02/36,0,1,0.html
(setq message-dont-reply-to-names 
      "utilisateur@\\(gnu\\|free\\).\\(org\\|fr\\)")
;; I want my replies to begin with something like "<user> writes:"
(defun message-insert-citation-line ()
  "La fonction qui insere une ligne aux reponses"
  (when message-reply-headers
    ;; In savannah-hackers group, we talk english
    (if (string-equal gnus-newsgroup-name "savannah-hackers")
 (insert (mail-header-from message-reply-headers) " said:\n\n")
      (insert (mail-header-from message-reply-headers) " a tapoté :\n\n")
      )))
(message "gnus.el: REPLY initialized")

Plusieurs Identités

Pour utiliser ceci, vous devez mettre la main sur gnus-pers.el dispo http://www.comsecmilnavpac.net/elisp/ en théorie. Vous devez modifier ce contenu en lien avec votre utilisation. Dans la première partie, on associe des identités à des groupes.

(custom-set-variables
 ;; This is the hash  "group name => identity"
 '(gnus-personality-electric-headers (quote 
          (
           (any ".*u-strasbg.*" "formel")
           (any ".*gnu.*" "gnu")
           )))
;; There are my identities
 '(gnus-personalities (quote 
                       (
     ; usual
   ("default" 
     "mathieu <yeupou@coleumes.org>"
    ""
     "~/.signature"
     )
     ; GNU voluteering
   ("gnu"
    "Mathieu Roy <yeupou@gnu.org>"
    ""
    "~/.signature_gnu"
     )
     ; Formal, neutral
   ("formel"
    "Mathieu Roy <mathieu.roy@coleumes.org>"
    ""
    "~/.signature_formel"
     )
   )))
 '(gnus-pers-cc-fix nil)
 )
(require 'gnus-pers)
(gnus-personality-init)
(message "gnus.el: IDENTITIES initialized")

Utiliser gnus

Et voilà, le stade de la configuration est passé. Il suffit de lancer emacs, et d'y lancer gnus, en tapant M-x gnus (M = Meta, donc alt).

Envoyer un courriel

Une fois gnus lancé, tapez m. Remplissez les champs qui vont bien. Par exemple, envoyez vous un courrier, pour tester le tout. Vous pouvez changer votre identité en tapant C-cC-l. Pour finir, tapez C-c C-c pour envoyer le courrier.

Consulter les courriels reçus

Il faut maintenant dire quels groupes (en fait, fichiers crées par procmail, selon le .procmailrc) vous desirez lire. Vous regardez dans le menu "Groups" -> "Subscribe" -> "Subscribe to a group". Il vous est demandé de taper le nom du groupe. Tapez tabulation. Si un courriel à bien été reçu, au moins un groupe doit être disponible. Sélectionnez le... Rentrez dans le groupe en tapant entrée... Utilisez les menus et apprennez les raccourcis claviers :)




@ Retour à la rubrique Logiciels


FDL

Ce document est libre, selon les termes de la licence GNU FDL

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Mathieu Roy le 04/10/2002.

Copyright

Copyright © 04/10/2002, Mathieu Roy

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL.
Affichages
Outils personnels

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA