Lire et écrire des emails avec emacs


78

Comment utiliser emacs pour lire et écrire des emails?

Cette question a pour but de fournir un point d'atterrissage canonique aux utilisateurs souhaitant traiter du courrier électronique à l'aide d'emacs.

Veuillez ne publier qu’un seul package / solution par réponse, avec autant de détails que possible. Les informations pouvant être utiles incluent:

  • exigences, environnement pris en charge
  • méthodes supportées (lecture et / ou envoi)
  • protocoles supportés (pop, imap, smtp, configuration du courrier local ...)
  • authentifications prises en charge
  • stockage de mots de passe (aucun, texte brut, accès à un portefeuille externe ...)
  • support hors ligne (aucun, mise en cache agressive, à la demande ...)
  • est-il facile d'utiliser des pièces jointes? (ajout par glisser-déposer, téléchargement, ouverture avec emacs ou une autre application ...)
  • instructions d'installation (plus les détails sont détaillés, mieux c'est), captures d'écran ...
  • prise en charge de fonctionnalités de messagerie supplémentaires (archivage, filtrage, dossiers)
  • prise en charge de fonctionnalités connexes supplémentaires (contacts, flux rss) ... inutile d’être trop détaillées ici, cela dépend du degré de corrélation entre la fonctionnalité et le courrier électronique

Les solutions nécessitant un outil externe pour traiter le courrier sont les bienvenues, dans la mesure où l'utilisateur n'a pas besoin d'interagir directement avec le processus externe.

Exemples: un paquet faisant office de serveur frontal pour mutt est dans le sujet, une solution permettant à un utilisateur de thunderbird de rédiger son message en utilisant emacs ne l’est pas.

Meta post pour discussion.

Liens rapides vers les réponses (par ordre alphabétique):


2
Existe-t-il un moyen de lire les emails avec emacs supportant le glisser-déposer pour ajouter des pièces jointes? C'est la fonctionnalité qui simplifie vraiment la vie avec un client de messagerie.
Nommez le

1
@Name Emacs prend-il en charge le glisser-déposer?
PythonNut

@PythonNut Eh bien, si je glisse un fichier sur un tampon, Emacs l'ouvre. Il semble donc qu'en principe, Emacs peut gérer les appels glisser-déposer du système.
Nom

@PythonNut Oui, Emacs supporte DnD. Voir ici et ici .
Basil

@ Name: Je trouve qu'il est beaucoup plus facile d' utiliser Helm ou Ivy pour sélectionner des pièces jointes que de les glisser-déposer, mais c'est une question de préférence personnelle.
Omar

Réponses:


40

J'utilise Mu4e . Il est bien documenté (également via Info) et, à ce jour, activement développé .

Mu4e est livré en tant qu'extension à mu , "un ensemble d'outils permettant de traiter les Maildirs et les fichiers de messages, en particulier pour indexer et rechercher des messages électroniques" . Cela fonctionne avec offlineimap ou fetchmail . J'utilise également le paquet Emacs smtpmail-multi pour pouvoir envoyer des messages à partir de différents comptes avec des paramètres différents. Pour une intégration en douceur avec votre fournisseur de messagerie, vous devriez apt-get install ca-certificates. Et si vous voulez une version gérée par paquet, vous pouvez utiliser mu lui-même apt-get install maildir-utils.

Plusieurs exemples de configuration sont fournis, y compris la "configuration minimale" suivante:

(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")

En fonction de la configuration de votre fournisseur de messagerie, vous devrez en faire un peu plus; et en particulier, vous devrez configurer OfflineIMAP ou Fetchmail pour récupérer le courrier. Dans ma configuration, illustrée ci-dessous, j'ai tout configuré pour fonctionner avec deux comptes. Si vous avez juste besoin de récupérer d'un compte, vous pouvez vous reporter à l' exemple .offlineimaprc inclus dans le manuel de mu4e.

En ce qui concerne les extensions et l'intégration avec d'autres packages Emacs: Mu4e s'intègre facilement au mode Org (pour capturer des liens vers des messages ou des recherches personnalisées, et même pour créer des courriers électroniques au format HTML à l'aide de la syntaxe Org, bien que je n'utilise pas cette fonctionnalité) via l' organisation incluse. -mu4e.el . Il existe une intégration séparée helm-mu qui est utilisable, mais nécessite davantage de travail, OMI. C'est thématisé dans solarisé.el . Il y a aussi une extension mu4e-maildirs qui donne un nombre pratique de messages lus et non lus par répertoire de courrier, et il y a quelques autres trucs que je n'ai pas essayés.

Avec les docs, ces exemples de configuration peuvent aider un nouvel utilisateur de mu4e à décoller.

.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

Config pour mu4eet 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)

capture d'écran: navigation avec la liste des termes de recherche: emacs-orgmode.gnu.org

parcourir la liste des organisations


1
Est-ce qu'il supporte Windows Emacs?
Leu_Grady

1
@ user3173715, OfflineIMAP ne prend pas officiellement en charge Windows "mais certains l'ont fait fonctionner"; Fetchmail est une autre option et fait partie de ce port Unixmail pour Windows ; mu lui-même est "écrit en C et un peu de C ++ (pour interfacer avec Xapian)", qui dispose de "deux options pour la prise en charge native de Microsoft Windows". Si vous êtes à l'aise pour assembler des morceaux de code comme celui-ci, vous pouvez très probablement le faire fonctionner. Je ne suis pas moi-même un utilisateur de Windows, je ne peux donc pas vous en dire plus. Peut-être que quelqu'un d'autre pourrait en dire davantage à ce sujet.
Joe Corneli

2
Existe-t-il un site Web expliquant pourquoi un utilisateur de gnus voudrait changer ou est passé à mu4e et pourquoi? Je suis curieux, cela semble populaire en ce moment.
Politza

2
@Malabarba, j’ai ajouté la "configuration minimale" des documents mu4e et lié à leur exemple simple de .offlineimaprc.
Joe Corneli

2
Une caractéristique importante ou un facteur déterminant, selon la façon dont un utilisateur peut le voir, est que le mu serveur fonctionne tout le temps après son lancement mu4e, ce qui affecte considérablement les performances d'Emacs lors de mes tests et empêche l'utilisation d'autres utilitaires, tels que l'ouverture d'un autre tampon devant être utilisé. aspell. La communication avec le mu serveur est une fonctionnalité intégrée qui ne peut pas être désactivée. À mon avis, c'est un défaut de conception qui aurait dû être corrigé avec des appels individuels à musans exécuter un serveur 24h / 24 et 7j / 7. Pour vérifier, tapez M-x list-processesaprès avoir exécutéM-x mu4e
lawlist

24

Si vous utilisez Gnus (déjà fourni avec Emacs), consultez https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/gnus-guide-en.org

Voici le résumé du guide:

  • Utiliser un minimum de configuration de EmacsWiki est suffisant ( http://www.emacswiki.org/emacs/GnusGmail ). Il est configuré pour tout service de messagerie, pas seulement Gmail.
  • Vous pouvez lire / écrire du courrier HTML
  • Vous devez souscrire manuellement des dossiers de messagerie
  • Appuyez C-u Entersur n'importe quel dossier de courrier pour voir TOUS les éléments de ce dossier, sinon, seuls les courriers non lus sont visibles.
  • les protocoles et les méthodes d'authentification populaires sont pris en charge immédiatement
  • pour le stockage du mot de passe, je viens d’utiliser easygpg qui est fourni avec Emacs. easygpg est un cadre général. Donc, le mot de passe est crypté et stocké hors ligne.
  • la mémoire cache locale en mode hors connexion est prise en charge il y a des âges Gnus
  • ajouter / supprimer / télécharger des pièces jointes est facile. Je ne connais pas le glisser-déposer car je n'utilise que le clavier. Vous avez besoin de la configuration 'mailcap-mime-data` pour ouvrir les pièces jointes avec des applications tierces.
  • la recherche de courrier localement / à distance est prise en charge immédiatement
  • filtre / archive est pris en charge. Mais je suggère popfile qui est un logiciel de filtrage de courrier indépendant. J'utilise popfile car il est bien meilleur que tout autre filtre de messagerie (le filtre de Gmail, par exemple).
  • La gestion des contacts est gérée par bbdb (un autre plugin Emacs), il est également facile d'importer des contacts depuis Gmail en utilisant gmail2bbdb.el (écrit par moi).
  • Pour la lecture des flux rss, vous feriez mieux d'utiliser elfeed à la place (Gnus peut le faire en utilisant le service Gwene, mais elfeed est facile à configurer et offre davantage de fonctionnalités prêtes à l'emploi). Gwene est puissant mais nécessite beaucoup plus de connaissances (mon guide Gnus, les APIs d’emacs-w3m, hydra, la programmation Lisp, les outils de cli Linux, le shell)
  • Gnus supporte toutes les plateformes. Mais sous Windows, vous devez ajouter les fichiers binaires OpenSSH et GnuTLS à la variable d’environnement PATH. Ces deux packages pourraient être installés via Cygwin. Emacs pourrait être la version native de Windows. Depuis Emacs 26, toutes les dépendances sont regroupées dans un seul paquet.

Consultez mon guide pour plus de conseils.

Messieurs, il est préférable de ne pas remplacer l'interface utilisateur Web de Gmail (ni celle d'un autre service de messagerie) par Gnus. La meilleure pratique pour maîtriser Gnus est de traiter Gnus comme une amélioration de Gmail. Donc, vous ne serez pas frustré si Gnus peut faire certaines choses, car vous pouvez toujours vous replier sur l'interface utilisateur Web.

Capture d'écran:

entrez la description de l'image ici


4
Merci d’avoir ajouté des gnus à la liste, c’est l’un des moyens canoniques d’utiliser le courrier électronique avec emacs. Mais pour le moment, cette réponse n’est guère plus qu’une réponse sous forme de lien uniquement. Il serait plus utile d'extraire des informations de ce lien (ou d'ailleurs!) Pour répondre plus précisément à la question: outre la prévention de la pourriture des liens, cela faciliterait également la comparaison avec d'autres logiciels de courrier.
T. Verron

En outre, une capture d'écran serait très utile pour que les nouveaux visiteurs puissent facilement se faire une idée de l'apparence.
Joe Corneli

11

Pas tant

J'utilise pas beaucoup pour mes emails dans emacs.

capture d'écran de la vue notmuch-hello

Il ne fonctionne que sur les mails locaux qui doivent être stockés un message par fichier et j'utilise les dossiers maildir dans lesquels mon serveur smtp est livré. Il devrait être capable de gérer d’autres solutions en synchronisant des mails avec des dossiers maildir sur votre ordinateur.

Pour commencer à l’utiliser, installez la base de ligne de commande et l’interface emacs et démarrez la configuration à l’aide d’un assistant texte en appelant notmuch, configurez un appel régulier à un script de filtrage qui appelle notmuch newet identifie les autres mails provenant des threads étiquetés (liste de diffusion, par exemple). les discussions que vous souhaitez ignorer) ou taggez les mails triés par votre démon mail dans des maildirs spéciaux. Dans Emacs, vous appelez M-x notmuchpour voir l'interface d'avant. Presque toute la configuration de l'interface peut être effectuée via l'interface de personnalisation d'emacs.

Comme il ne télécharge pas de messages d’autres systèmes, il n’a pas d’authentification ni de protocole intégré, mis à part l’utilisation du support intégré d’emacs pour l’envoi de courriels.

Il n'utilise pas de dossiers en tant que tels, mais dans la pratique, les recherches stockées donnent l'impression de lire des mails. Il répertorie toutes les balises utilisées dans la vue notmuch-hello. Ainsi, lorsque vous décidez de marquer votre courrier, vos listes sont automatiquement mises à jour. Il n’a pas besoin d’archivage car il ne devrait pas ralentir lorsque vous avez beaucoup de courriels.

La partie elisp de notmuch se distingue par les possibilités de recherche rapide en texte intégral et par balises et étendue pour répertorier les correspondances et répondre aux messages. Je ne sais pas comment le glisser-déposer fonctionnerait si peu que je l'utilise via des terminaux et des shells distants sur mon serveur.

Affichage des messages dans un fil de messages

autre vue des résultats de recherche

plus de captures d'écran: https://notmuchmail.org/screenshots/

La partie la plus difficile à ce sujet serait d'avoir des balises synchronisées lorsque vous n'utilisez pas beaucoup d'ordinateurs sur 2 ordinateurs différents, mais des personnes ont déjà travaillé à ce sujet et, d'après ce que j'ai pu tirer de la liste de diffusion, cela fonctionne probablement maintenant. Ou jetez un coup d'œil à https://notmuchmail.org/remoteusage/ pour une nouvelle configuration que je viens de découvrir.

Il existe des packages pour la plupart des distributions Linux et il est développé dans un environnement de bazar via la liste de diffusion. Si vous compilez vous-même à partir de tarballs ou de git, il utilise le code C et possède des dépendances sur Xapian pour stocker les extraits des messages, GMime pour le décodage des emails MIME, Talloc pour la gestion de la mémoire et zlib (également une dépendance de Xapian). .

Cela fonctionnerait probablement bien avec rss2email ou n’importe quelle solution convertissant les flux RSS en maildirs.

Il est utilisable via la ligne de commande et, mis à part l'interface par défaut d'emacs elisp, il est utilisé avec mutt (résultats de recherche de copies / liens vers un dossier maildir sur le disque) ou vim.

Si votre volume de courrier dépasse le mien (environ 90 000 messages, peu de courrier), il faudra probablement un peu de maintenance pour continuer à fonctionner.


1
Emacs Notmuch est agréable à utiliser, très puissant, très rapide et assez simple à apprendre et à configurer (beaucoup plus simple que Gnus). J'en suis très satisfait. Je n'ai pas testé Mu4e, mew ou Wanderlust cependant. Quoi qu'il en soit, voici quelques articles intéressants: lwn.net/Articles/705856 wwwtech.de/articles/2016/jul/my-personal-mail-setup
Jorge

6

J'ai été un utilisateur heureux de mew pendant de nombreuses années.

Je n'ai pas utilisé emacs pour lire et écrire du courrier depuis longtemps, alors ces informations risquent d'être périmées. Espérons que les utilisateurs plus récents de mew pourront y répondre. Pour l’instant, considérons cette réponse comme un condensé. (Je vais en faire un wiki de la communauté, afin que d'autres puissent l'éditer plus librement.)

D'abord et avant tout, d'après mon expérience, le temps était rapide . Je n'ai eu aucune difficulté à gérer les listes de diffusion avec un trafic énorme en utilisant mew.

L'installation de mew était un peu compliquée, notamment parce qu'elle utilise (utilisé?) stunnelPour créer des connexions chiffrées aux serveurs SMTP et IMAP. Mais, fondamentalement, il s’agit simplement d’éditer un fichier ~/.mew.elet d’établir un répertoire pour que mew puisse conserver ses données. À part stunnel(et emacs, bien sûr), il n’a pas de dépendances.

La documentation semble adéquate, même si je me suis souvent retrouvée dans la mauvaise section. L'entretien semble avoir ralenti à un filet, cependant. Il y a quelques corrections de bugs de temps en temps, mais pas de nouvelles fonctionnalités que j'ai remarquées depuis un moment.


Je fournirais plus de détails, mais comme je l'ai dit, je n'ai pas utilisé emacs pour le courrier depuis longtemps. Principalement à cause du déluge de courriers électroniques au format HTML, qui sont devenus une douleur majeure dans le postérieur à long terme. Donc, ces jours-ci, je n'utilise que des clients de messagerie basés sur une interface graphique.
Harald Hanche-Olsen

Merci de l’avoir répertoriée, espérons qu'un autre nouvel utilisateur puisse entrer et remplir les blancs. Concernant les courriels au format html, la situation a peut-être changé de manière générale maintenant que emacs est livré avec un moteur de rendu html.
T. Verron

@ T.Verron Pourrait être. Je suis à peu près sûr que mew ne prend pas en charge le moteur de rendu html intégré. Une grande question, cependant, est de savoir comment traiter les images en ligne. Si ce sont des liens vers des images externes, pas de problème, mais qu'en est-il des images incluses dans le message? En passant, il peut être configuré pour afficher le courrier codé en HTML avec w3m, mais je n’ai jamais pu le tester.
Harald Hanche-Olsen

5

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

FONCTIONNALITÉS:

  • Mise en œuvre dans elisp uniquement.
  • Prise en charge de IMAP4rev1, NNTP, POP (POP3 / APOP), MH et Maildir.
  • Accès intégré aux messages basés sur les spécifications de dossiers comme Mew.
  • Les raccourcis clavier et le traitement des marques comme Mew.
  • Gestion des threads et des messages non lus.
  • Mode Dossier pour sélectionner et éditer les dossiers abonnés.
  • Cache de messages, opération déconnectée.
  • Fcc MH-like (Fcc:% de sauvegarde est possible).
  • Support complet de MIME (par SEMI).
  • Projet de révision de courrier et de nouvelles comme une même interface.
  • Interface à base d'icônes pour la liste des dossiers (XEmacs et> = Emacs 21).
  • Ignorer la récupération d'une grande partie du message de MIME (IMAP4).
  • La recherche côté serveur (IMAP4), la recherche internationalisée est disponible.
  • Dossier virtuel, y compris, mais sans s'y limiter, les recherches personnalisées utilisant Wanderlust ou des utilitaires externes tels que muet grep.
  • Dossier compressé.
  • Expiration automatique des anciens messages.
  • Refiling automatique.
  • Brouillons.

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.