Leer y escribir correos electrónicos con emacs


78

¿Cómo podemos usar emacs para leer y escribir correos electrónicos?

Esta pregunta está destinada a proporcionar un punto de aterrizaje canónico para los usuarios que desean manejar el correo electrónico utilizando emacs.

Publique solo un paquete / solución por respuesta, con la mayor cantidad de detalles posible. La información que puede ser útil incluye:

  • requisitos, entorno soportado
  • métodos admitidos (leer y / o enviar)
  • protocolos admitidos (pop, imap, smtp, configuración de correo local ...)
  • autenticaciones compatibles
  • almacenamiento de contraseña (ninguno, texto plano, acceso a una billetera externa ...)
  • soporte fuera de línea (ninguno, almacenamiento en caché agresivo, bajo demanda ...)
  • ¿Qué tan fácil es usar archivos adjuntos? (agregar con arrastrar y soltar, descargar, abrir con emacs u otra aplicación ...)
  • instrucciones de configuración (cuanto más detallado, mejor), capturas de pantalla ...
  • soporte para funciones de correo electrónico adicionales (archivado, filtrado, carpetas)
  • soporte para funciones relacionadas adicionales (contactos, feeds RSS) ... no es necesario que sea demasiado detallado aquí, dependiendo de cuán estrechamente se relacione la función con el correo electrónico

Las soluciones que requieren una herramienta externa para procesar el correo son bienvenidas, siempre que el usuario no necesite interactuar directamente con el proceso externo.

Ejemplos: un paquete que actúa como front-end para mutt es sobre el tema, una solución que permite a un usuario de Thunderbird escribir su mensaje usando emacs no lo es.

Meta publicación para discusión.

Enlaces rápidos a respuestas (alfabéticamente):


2
¿Hay alguna forma de leer correos electrónicos con emacs que admitan arrastrar y soltar para agregar archivos adjuntos? Esta es la característica que realmente simplifica la vida con un cliente de correo electrónico.
Nombre

1
@Name ¿Emacs incluso admite arrastrar y soltar?
PythonNut

@PythonNut bien, si arrastro y suelto un archivo en un búfer, Emacs abre ese archivo. Parece que, en principio, Emacs puede manejar llamadas de arrastrar y soltar desde el sistema.
Nombre

@PythonNut Sí, Emacs admite DnD. Mira aquí y aquí .
Basil

@Nombre: encuentro que usar el timón o la hiedra para elegir archivos adjuntos es mucho más fácil que arrastrarlos y soltarlos, pero eso es una cuestión de preferencia personal.
Omar

Respuestas:


40

Yo uso Mu4e . Está bien documentado (también a través de Información) y, a partir de este escrito, se desarrolló activamente .

Mu4e se envía como un complemento de mu , "un conjunto de herramientas para manejar Maildirs y archivos de mensajes, en particular para indexar y buscar mensajes de correo electrónico" . Funciona junto con offlineimap o fetchmail . También uso el paquete Emacs smtpmail-multi para poder enviar desde diferentes cuentas con diferentes configuraciones. Para una integración fluida con su proveedor de correo electrónico, debe hacerlo apt-get install ca-certificates. Y si desea una versión administrada por paquete, puede tomar mu con ella apt-get install maildir-utils.

Se proporcionan varias configuraciones de ejemplo , incluida la siguiente "configuración mínima":

(require 'mu4e)     
(setq message-send-mail-function   'smtpmail-send-it
      smtpmail-default-smtp-server "smtp.example.com"
      smtpmail-smtp-server         "smtp.example.com"
      smtpmail-local-domain        "example.com")

Según la configuración de su proveedor de correo, tendrá que hacer un poco más; y, en particular, deberá configurar OfflineIMAP o Fetchmail para recuperar el correo. En mi configuración, que se muestra a continuación, configuré todo para que funcione con dos cuentas. Si solo necesita recuperar de una cuenta, puede consultar la muestra .offlineimaprc incluida en el manual de mu4e.

En cuanto a las extensiones y la integración con otros paquetes de Emacs: Mu4e integra convenientemente con el modo Org (para la captura de los enlaces a los mensajes o las búsquedas personalizadas, e incluso para los mensajes de correo electrónico con formato HTML utilizando la sintaxis de creación Org, aunque yo no uso esa característica) a través de los incluidos org -mu4e.el . Hay una integración helm-mu separada que es utilizable, pero necesita más trabajo IMO. Tiene temática en solarized.el . También hay una extensión mu4e-maildirs-extension que proporciona un recuento conveniente de mensajes leídos y no leídos por directorio de correo, y hay algunas otras cosas que no he probado.

Junto con los documentos, estas configuraciones de muestra pueden ayudar a un nuevo usuario de mu4e a despegar.

.offlineimaprc

[general]
accounts = Gmail, Uni
maxsyncaccounts = 3

[Account Gmail]
localrepository = Local
remoterepository = Remote
status_backend = sqlite

[Repository Local]
type = Maildir
localfolders = ~/Maildir/google

[Repository Remote]
type = IMAP
remotehost = imap.gmail.com
remoteuser = other.e.mail@gmail.com
remotepass = TryAndGuess12345
ssl = yes
maxconnections = 1
realdelete = no

# cert_fingerprint = fa88366ccd90cd02f7a5655800226c43c8044ada
# but they change all the time, so...
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

# Folders to get:
#
# In Gmail, filter all current mail that isn't *otherwise*
# filtered into the folder or folders you want to receive/sync.
# Keep that up to date; it will boost efficiency if you would
# otherwise be syncing a very large "Inbox" here.
folderfilter = lambda foldername: foldername in [
             'JUNE2015', 'Drafts', 'Sent']

[Account Uni]
localrepository = UniLocal
remoterepository = UniRemote
status_backend = sqlite

[Repository UniLocal]
type = Maildir
localfolders = ~/Maildir/uni

[Repository UniRemote]
type = IMAP
remotehost = pod666.outlook.com
remoteuser = username@campus.university.ac.uk
remotepass = TryAndGuess9876
ssl = yes
maxconnections = 1
realdelete = no

sslcacertfile = /etc/ssl/certs/ca-certificates.crt

Configuración para mu4ey smtpmail-multi:

;;; Replies

(setq message-citation-line-function 'message-insert-formatted-citation-line) 
(setq message-citation-line-format "On %a, %b %d %Y, %f wrote:\n")

;;; smtp

(add-to-list 'load-path "~/smtpmail-multi")
(require 'smtpmail-multi)
(require 'smtpmail)

(setq smtpmail-multi-accounts
      (quote
       ((uni . ("username@campus.university.ac.uk"
                 "pod666.outlook.com"
                 587
                 "e.mail@uni.ac.uk"
                 nil nil nil nil))
        (gmail . ("other.e.mail@gmail.com"
                   "smtp.gmail.com"
                   587
                   "other.e.mail@gmail.com"
                   starttls
                   nil nil nil)))))

(setq smtpmail-multi-associations
      (quote
       (("other.e.mail@gmail.com" gmail)
        ("e.mail@uni.ac.uk" uni))))

(setq smtpmail-multi-default-account (quote gmail))

(setq message-send-mail-function 'smtpmail-multi-send-it)

(setq smtpmail-debug-info t)
(setq smtpmail-debug-verbose t)

;;; MU4E config

(require 'shr)

(defun shr-render-current-buffer ()
  (shr-render-region (point-min) (point-max)))

(setq mu4e-compose-dont-reply-to-self t)
(setq mu4e-compose-signature-auto-include nil)
(setq mu4e-html2text-command 'shr-render-current-buffer)

(setq mu4e-mu-binary "~/mu/mu/mu")

(setq user-full-name "Hello World")
(setq user-mail-address "other.e.mail@gmail.com")

(setq mu4e-hide-index-messages t)

(setq
   mu4e-maildir       "~/Maildir"   ;; top-level Maildir
   mu4e-sent-folder   "/sent"       ;; folder for sent messages
   mu4e-drafts-folder "/drafts"     ;; unfinished messages
   mu4e-trash-folder  "/trash"      ;; trashed messages
   mu4e-refile-folder "/archive")   ;; saved messages

(setq
   mu4e-get-mail-command "offlineimap"   ;;  -a Uni to just do university acc't
   mu4e-update-interval nil)             ;; 300 to update every 5 minutes

(setq mu4e-bookmarks
  '( ("flag:unread AND NOT flag:trashed"                "Unread messages"        ?u)
     ("date:today..now"                                 "Today's messages"       ?t)
     ("date:7d..now"                                    "Last 7 days"            ?w)
     ("date:1d..now AND NOT list:emacs-orgmode.gnu.org" "Last 1 days"            ?o)
     ("date:1d..now AND list:emacs-orgmode.gnu.org"     "Last 1 days (org mode)" ?m)
     ("maildir:/sent"                                   "sent"                   ?s)
     ("maildir:/uni/INBOX AND date:7d..now"             "University Last 7 days" ?g)
     ("maildir:/google/JUNE2015 AND date:7d..now"       "Gmail Last 7 days"      ?c)
     ("mime:image/*"                                    "Messages with images"   ?p)))

(setq mu4e-maildir-shortcuts
      '( ("/google/JUNE2015" . ?c)
         ("/uni/INBOX"       . ?g)
         ("/sent"            . ?s)))

(setq mu4e-user-mail-address-list (list "other.e.mail@gmail.com" "e.mail@uni.ac.uk"))

(setq message-kill-buffer-on-exit t)

(setq
 mu4e-view-show-images t
 mu4e-view-image-max-width 800)

;; A little demo function for switching accounts
(defun switch ()
  (interactive)
  (save-excursion (goto-char (point-min))
                  (forward-char 19)
                  (cond
                   ((looking-at "other.e.mail@gmail.com")
                    (delete-region (match-beginning 0) (match-end 0))
                    (insert "e.mail@uni.ac.uk")
                    (buffer-face-set 'default))
                   ((looking-at "e.mail@uni.ac.uk")
                    (delete-region (match-beginning 0) (match-end 0))
                    (insert "other.e.mail@gmail.com")
                    (buffer-face-set 'bold-italic))
                   (t nil))))

(add-hook 'mu4e-compose-mode-hook (lambda () (buffer-face-set 'bold-italic)))

;;; Saving outgoing mail

;; Following tip from documentation for `mu4e-sent-messages-behavior' - see also
;; http://www.djcbsoftware.nl/code/mu/mu4e/Saving-outgoing-messages.html
;; for some related points, but not necessary to do things both ways.

(setq message-sendmail-envelope-from 'header)

(setq mu4e-sent-messages-behavior
      (lambda ()
    (if (string= (message-sendmail-envelope-from) "other.e.mail@gmail.com")
        (progn (message "Delete sent mail.")
           'delete)
      (progn (message "Save sent mail.")
         'sent))))

;;; Org mode compatibility

;; Use `org-store-link' to store links, and `org-insert-link' to paste them

(require 'org-mu4e)

;;; That's all

(provide 'my-mu4e-config)

captura de pantalla: navegación con la lista de términos de búsqueda: emacs-orgmode.gnu.org

navegar por la lista de organizaciones


1
¿Es compatible con Windows emacs?
Leu_Grady

1
@ user3173715, OfflineIMAP no admite oficialmente Windows "pero algunos lo han hecho funcionar"; Fetchmail es otra opción y es parte de este puerto de Unixmail para Windows ; mu en sí está "escrito en C y un poco de C ++ (para interactuar con Xapian)", que tiene "dos opciones para el soporte nativo de Microsoft Windows". Si se siente cómodo armando fragmentos de código así, es muy probable que pueda hacerlo funcionar. No soy un usuario de Windows, así que no puedo decirte más, tal vez alguien más pueda comentar más sobre eso.
Joe Corneli

2
¿Hay algún sitio web que explique por qué un usuario gnus querría cambiar o ha cambiado a mu4e y por qué? Tengo curiosidad, parece popular en este momento.
politza

2
@Malabarba, agregué la "configuración mínima" de los documentos de mu4e y la vinculé a su ejemplo simple de un .offlineimaprc.
Joe Corneli

2
Una característica importante o un factor decisivo, dependiendo de cómo lo vea un usuario, es que el mu servidor se ejecuta todo el tiempo después del inicio mu4ey esto afecta drásticamente el rendimiento de Emacs en mis pruebas y evita el uso de otras utilidades, como abrir otro búfer que necesita usar aspell. La comunicación con el mu servidor es una función integrada y no es algo que se pueda deshabilitar. En mi opinión, es un defecto de diseño que debería haberse corregido con llamadas individuales musin ejecutar un servidor 24/7. Para verificar, escriba M-x list-processesdespués de ejecutarM-x mu4e
leyes

24

Si usa Gnus (ya incluido con Emacs), consulte https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/gnus-guide-en.org

Aquí está el resumen de la guía:

  • Usar la configuración mínima de EmacsWiki es suficiente ( http://www.emacswiki.org/emacs/GnusGmail ). Está configurado para cualquier servicio de correo, no solo para Gmail
  • Puedes leer / escribir correo html
  • Necesita suscribirse carpetas de correo manualmente
  • Presione C-u Enteren cualquier carpeta de correo para ver TODOS los elementos de esa carpeta, de lo contrario, solo se verán los correos no leídos.
  • Los protocolos y métodos de autenticación populares son compatibles desde el primer momento.
  • para el almacenamiento de contraseñas, acabo de usar easygpg que se incluye con Emacs. easygpg es un marco general. Entonces la contraseña se cifra y se almacena sin conexión.
  • la memoria caché local sin conexión de correo electrónico es compatible con Gnus hace años
  • agregar / eliminar / descargar archivos adjuntos es fácil. No sé lo de arrastrar y soltar porque solo uso el teclado. Necesita configurar 'mailcap-mime-data' para abrir archivos adjuntos con aplicaciones de terceros.
  • la búsqueda de correo local / remota es compatible desde el primer momento
  • filtro / archivo es compatible. Pero sugiero popfile, que es un software de filtro de correo independiente. Utilizo popfile porque es mucho mejor que cualquier otro filtro de correo (el propio filtro de Gmail, por ejemplo).
  • La gestión de contactos es manejada por bbdb (otro complemento de Emacs), también es fácil importar contactos desde Gmail usando gmail2bbdb.el (escrito por mí).
  • Para leer rss, es mejor que uses elfeed en su lugar (Gnus puede hacerlo usando el servicio Gwene, pero elfeed es fácil de configurar y tiene más funciones listas para usar). Gwene es potente pero requiere mucho más conocimiento (mi guía Gnus, API de emacs-w3m, hydra, programación Lisp, herramientas cli de Linux, shell)
  • Gnus es compatible con todas las plataformas. Pero en Windows, necesita agregar binarios de OpenSSH y GnuTLS a su variable de entorno PATH. Estos dos paquetes podrían instalarse a través de Cygwin. Emacs podría ser la versión nativa de Windows. Desde Emacs 26, todas las dependencias se empaquetan en un paquete.

Consulte mi guía para obtener más consejos.

En mi opinión, es mejor que no reemplace la interfaz de usuario web de Gmail (o la interfaz de usuario web de cualquier otro servicio de correo) con Gnus por completo. La mejor práctica para dominar Gnus es tratar a Gnus como una mejora de Gmail. Por lo tanto, no se sentirá frustrado si Gnus puede hacer algo porque siempre puede recurrir a la interfaz de usuario web.

Captura de pantalla:

ingrese la descripción de la imagen aquí


44
Gracias por agregar gnus a la lista, parece ser una de las formas canónicas de usar el correo electrónico con emacs. Pero en este momento, esta respuesta es apenas más que una respuesta de solo enlace. Sería más útil extraer información de ese enlace (¡o de otro lugar!) Para responder la pregunta con mayor precisión: además de evitar la descomposición del enlace, también ayudaría en la comparación con otros paquetes de correo.
T. Verron

Además, una captura de pantalla sería genial para que los nuevos visitantes puedan tener una idea de la apariencia.
Joe Corneli

11

No mucho

Uso notmuch para mis correos electrónicos en emacs.

captura de pantalla de la vista notmuch-hello

Solo funciona en correos locales que necesitaban ser almacenados un mensaje por archivo y uso carpetas maildir a las que entrega mi servidor smtp. Debería poder hacer frente a otras soluciones que sincronizan correos a carpetas maildir en su computadora.

Para comenzar a usarlo, instale la base de la línea de comandos y la interfaz emacs y comience a configurar mediante un breve asistente de texto llamando notmuch, configure una llamada regular a un script de filtrado que llama notmuch newy etiqueta otros correos de los hilos que etiquetó (por ejemplo, lista de correo hilos que desea ignorar) o etiquetar los correos ordenados por su demonio de correo en maildirs especiales. En emacs llamas M-x notmuchpara ver la interfaz de antes. Casi toda la configuración de la interfaz se puede realizar a través de la interfaz de personalización de emacs.

Como no descarga mensajes de otros sistemas, no tiene autenticación o protocolos integrados, además de usar el soporte integrado de emacs para enviar correos electrónicos.

No utiliza carpetas como tal, pero en la práctica las búsquedas almacenadas se sienten como ellas para leer correos. Enumera todas las etiquetas usadas en la vista notmuch-hello, de modo que cuando decide cómo etiquetar su correo, sus listas se actualizan automáticamente. No necesita archivar, ya que no debería ralentizarse cuando tiene muchos correos electrónicos.

La parte elisp de notmuch se separa de las posibilidades de búsqueda rápida de texto completo y de búsqueda etiquetada y de alcance para enumerar coincidencias y responder mensajes. No sé cómo funcionaría arrastrar y soltar, ya que lo uso a través de terminales y shells remotos en mi servidor.

Vista de mensaje dentro de un hilo de mensajes

vista de árbol alternativa de resultados de búsqueda

más capturas de pantalla: https://notmuchmail.org/screenshots/

La parte más difícil de esto sería tener etiquetas sincronizadas cuando usas no mucho en 2 computadoras diferentes, pero la gente lo ha solucionado, y de lo que deduje de la lista de correo probablemente funciona ahora. O eche un vistazo a https://notmuchmail.org/remoteusage/ para obtener una nueva configuración que acabo de encontrar.

Hay paquetes para la mayoría de las distribuciones de Linux y se desarrolla en un entorno de bazar a través de la lista de correo. Si se autocompila a partir de tarballs o git, usa el código C y depende de Xapian para almacenar los extractos de los mensajes, GMime para decodificar correos electrónicos MIME, Talloc para la administración de memoria y zlib (que también es una dependencia de Xapian) .

Probablemente funcionaría bien con rss2email o con cualquier solución que convierta los canales RSS en maildirs.

Se puede usar a través de la línea de comandos y, aparte de la interfaz predeterminada de emacs elisp, otras personas lo usan con mutt (resultados de búsqueda de copias / enlaces a una carpeta maildir en el disco) o vim.

Probablemente necesitará algo de mantenimiento para seguir ejecutándose si su volumen de correo excede el mío (~ 90k mensajes, no mucho correo).


1
Emacs Notmuch es agradable de usar, muy potente, muy rápido y bastante simple de aprender y configurar (mucho más simple que Gnus). Estoy muy satisfecho con ello. Sin embargo, no he probado Mu4e, mew o Wanderlust. De todos modos, aquí hay algunos buenos artículos: lwn.net/Articles/705856 wwwtech.de/articles/2016/jul/my-personal-mail-setup
Jorge

6

Fui un usuario feliz de Mew durante muchos años.

No he usado emacs para leer y escribir correos durante mucho tiempo, por lo que esta información puede estar desactualizada. Con suerte, los usuarios de mew más recientes pueden completarlo. Por ahora, considere esta respuesta como un trozo. (Lo haré wiki comunitario, para que otros puedan editarlo más libremente).

En primer lugar, en mi experiencia, mew fue rápido . No tuve dificultad para manejar listas de correo con tráfico enorme usando mew.

La configuración de mew fue un poco complicada, especialmente porque usa (¿se usa?) stunnelPara crear conexiones cifradas a servidores SMTP e IMAP. Pero básicamente, solo implica editar un archivo ~/.mew.ely configurar un directorio para que mew mantenga sus datos. Además de stunnel(y emacs, por supuesto), no tiene dependencias.

La documentación parece adecuada, aunque a menudo me encuentro buscando en la sección incorrecta. Sin embargo, el mantenimiento parece haberse ralentizado. Hay algunas correcciones de errores de vez en cuando, pero no hay características nuevas que haya notado por un tiempo.


Proporcionaría más detalles, pero como dije, no he usado emacs para correo por mucho tiempo. Principalmente debido al diluvio del correo electrónico formateado solo en HTML, que a largo plazo se convirtió en un gran dolor en la parte posterior. En estos días, solo uso clientes de correo electrónico basados ​​en GUI.
Harald Hanche-Olsen

Gracias por incluirlo, espero que algún otro usuario de Mew pueda entrar y llenar los espacios en blanco. Acerca de los correos electrónicos con formato html, ¿tal vez la situación ha cambiado en general ahora que emacs se envía con un procesador html?
T. Verron

@ T.Verron podría ser. Estoy bastante seguro de que mew no es compatible con el procesador html incorporado de fábrica. Sin embargo, una gran pregunta es cómo lidiar con las imágenes en línea. Si son enlaces a imágenes externas, no hay problema, pero ¿qué pasa con las imágenes incluidas con el mensaje? Por cierto, se puede configurar para mostrar correo codificado en HTML usando w3m, pero nunca pude probar eso.
Harald Hanche-Olsen

5

WANDERLUST : https://github.com/wanderlust/wanderlust

CARACTERISTICAS:

  • Implementación solo en elisp.
  • Soporte de IMAP4rev1, NNTP, POP (POP3 / APOP), MH y Maildir.
  • Acceso integrado a mensajes basados ​​en especificaciones de carpeta como Mew.
  • Vinculaciones de teclas y procesamiento de marcas como Mew.
  • Gestión de hilos y mensajes no leídos.
  • Modo de carpeta para seleccionar y editar carpetas suscritas.
  • Caché de mensajes, Operación desconectada.
  • Fcc tipo MH (Fcc:% de respaldo es posible).
  • Soporte completo de MIME (por SEMI).
  • Borrador de edición de correo y noticias como una misma interfaz.
  • Interfaz basada en iconos para la lista de carpetas (XEmacs y> = Emacs 21).
  • Omita la recuperación de una parte de mensaje grande de MIME (IMAP4).
  • Búsqueda del lado del servidor (IMAP4), la búsqueda internacionalizada está disponible.
  • Carpeta virtual, incluidas, entre otras, búsquedas personalizadas con Wanderlust o utilidades externas como muy grep.
  • Carpeta comprimida.
  • Caducidad automática de mensajes antiguos.
  • Rellenado automático.
  • Borradores de plantillas.

EMACS WIKI: https://www.emacswiki.org/emacs/WanderLust