Oct 26 2014

Offlineimap + Mu + Mu4e en emacs: alternativas modernas a gnus y rmail

Tag: advancedoverdrive @ 7:04 pm

mu4e es un moderno cliente de correo basado en el indexador/buscador de emails mu. La principal ventaja de esta herramienta es la super eficiencia a la hora de leer los correos. Entre algunas de sus funcionalidades destaca:

  • Completamente basado en busquedas: no hay directorios, solo peticiones.
  • Documentacion completa con ejemplos de configuracion.
  • La interfaz de usuario esta optimizada para velocidad con keybindings cortos para acciones.
  • Es asincrono, por lo que las acciones no bloquean emacs.
  • Soporte criptografico
  • Se emplea el texto enriquecido a la hora de escribir emails mediante org-mode
  • Permite el auto-completado basado en los mensajes previos.
  • Es extensible.

Pasos para la instalacion:

Primero debemos descargar el codigo o bien de la web https://code.google.com/p/mu0/downloads/list o bien directamente del repositorio git:

$ git clone https://github.com/djcb/mu.git
$ cd mu

Instalamos otros paquetes necesarios para la compilacion de mu4e o su uso:

$ sudo apt-get install libgmime-2.6-dev libxapian-dev gnutls-bin guile-2.0-dev html2text xdg-utils

Instalamos offlineimap y sqlite:

$ sudo apt-get install offlineimap sqlite

Configuramos, compilamos e instalamos mu (tambien se puede instalar por ejemplo desde los repositorios de debian con apt):

$ autoreconf -i
$ ./configure
$ make
$ sudo make install

Configuramos offlineimap para que pueda acceder a emails de gmail, creamos un fichero llamado .offlineimaprc en nuestro directorio de usuario:

[general]
# List of accounts to be synced, separated by a comma.
accounts = Gmail
maxsyncaccounts = 3

[Account Gmail]
# Identifier for the local repository; e.g. the maildir to be synced via IMAP.
localrepository = Gmail-local
# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.
remoterepository = Gmail-remote
# Status cache. Default is plain, which eventually becomes huge and slow.
status_backend = sqlite

[Repository Gmail-local]
type = Maildir
localfolders = ~/Maildir

[Repository Gmail-remote]
type = IMAP
remotehost = imap.gmail.com
remoteuser = <TU_EMAIL@gmail.com>
remotepass = <TU_PASSWORD>
ssl = yes
maxconnections = 1
realdelete = no

folderfilter = lambda foldername: foldername in ['INBOX', 'Dev']
# Necessary as of OfflineIMAP 6.5.4
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

Checkeamos que podamos acceder a nuestro email mediante mu:

$ mu index

o bien podemos probar lanzando

$ offlineimap

El output que debemos ver es algo asi.

Selection_004

Ahora anadimos las siguientes lineas de configuracion a nuestro .emacs:

;;----------------------------------------------------------
;; ---- BEGIN Email client ----
;;----------------------------------------------------------
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")

(require 'mu4e)

;; Maildir
(setq mu4e-maildir "~/Maildir")
(setq mu4e-drafts-folder "/[Gmail].Drafts")
(setq mu4e-sent-folder   "/[Gmail].Sent Mail")
(setq mu4e-trash-folder  "/[Gmail].Trash")

;; Don't save message to Sent Messages, Gmail/IMAP takes care of this
(setq mu4e-sent-messages-behavior 'delete)

;; Setup some handy shortcuts
;; you can quickly switch to your Inbox -- press ``ji''
;; then, when you want archive some messages, move them to
;; the 'All Mail' folder by pressing ``ma''.
(setq mu4e-maildir-shortcuts
      '( ("/INBOX"               . ?i)
         ("/[Gmail].Sent Mail"   . ?s)
         ("/[Gmail].Trash"       . ?t)
         ("/[Gmail].All Mail"    . ?a)))

;; Allow for updating mail using 'U' in the main view:
(setq mu4e-get-mail-command "offlineimap")

;; Something about ourselves
(setq
 user-mail-address "your_email@gmail.com"
 user-full-name  "nickname (Your Name Here)"
 message-signature
 (concat
  "nickname (Your name here)\n"
  "Email: your_email@gmail.com\n"
  "Blog: your_blog.org\n"
  "Douban: your_website.com"
  "\n"))
(require 'smtpmail)

;; For emacs-24 you can use:
(setq message-send-mail-function 'smtpmail-send-it
    smtpmail-stream-type 'starttls
    smtpmail-default-smtp-server "smtp.gmail.com"
    smtpmail-smtp-server "smtp.gmail.com"
    smtpmail-smtp-service 587)

;; Don't keep message buffers around
(setq message-kill-buffer-on-exit t)

;; Attaching files with M-x dired and then C-c <RET> C-a
(require 'gnus-dired)
;; make the `gnus-dired-mail-buffers' function also work on
;; message-mode derived modes, such as mu4e-compose-mode
(defun gnus-dired-mail-buffers ()
  "Return a list of active message buffers."
  (let (buffers)
    (save-current-buffer
      (dolist (buffer (buffer-list t))
	(set-buffer buffer)
	(when (and (derived-mode-p 'message-mode)
		(null message-sent-message-via))
	  (push (buffer-name buffer) buffers))))
    (nreverse buffers)))

(setq gnus-dired-mail-mode 'mu4e-user-agent)
(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)

;; Viewing inline images
(setq mu4e-view-show-images t)
;; Use imagemagick, if available
(when (fboundp 'imagemagick-register-types)
   (imagemagick-register-types))

Checkeamos que podemos acceder a nuestro email mediante mu4e en emacs:

Selection_003

Al pulsar la «U» vemos que se esta actualizando el email. Podemos tambien cargar un speedbar con M-x speedbar

1

Lectura de emails mediante «j i» para el jump inbox. Para escribir emails simplemente pulsamos «C» de compose y para enviarlos «C-c C-c»

Referencias:

http://wenshanren.org/?p=111
http://www.emacswiki.org/emacs/mu4e
http://www.djcbsoftware.nl/code/mu/cheatsheet.html
https://github.com/djcb/mu/blob/master/README
http://www.djcbsoftware.nl/code/mu/mu4e.html
http://www.djcbsoftware.nl/code/mu/mu4e.html
http://emacs-fu.blogspot.fi/2012/08/introducing-mu4e-for-email.html
http://zmalltalker.com/linux/mu.html
http://www.djcbsoftware.nl/code/mu/mu4e/Speedbar-support.html
http://www.djcbsoftware.nl/code/mu/mu4e/Attaching-files-with-dired.html
http://www.djcbsoftware.nl/code/mu/mu4e/Writing-messages.html
http://www.djcbsoftware.nl/code/mu/mu4e/Attaching-files-with-dired.html#Attaching-files-with-dired
http://www.djcbsoftware.nl/code/mu/mu4e/Viewing-images-inline.html
http://www.emacswiki.org/emacs/mu4e