Leggere e scrivere e-mail con emacs


78

Come possiamo usare emacs per leggere e scrivere e-mail?

Questa domanda ha lo scopo di fornire un punto di atterraggio canonico per gli utenti che desiderano gestire la posta elettronica utilizzando emacs.

Si prega di inviare un solo pacchetto / soluzione per risposta, con il maggior numero di dettagli possibile. Le informazioni che possono essere utili includono:

  • requisiti, ambiente supportato
  • metodi supportati (lettura e / o invio)
  • protocolli supportati (pop, imap, smtp, configurazione della posta locale ...)
  • autenticazioni supportate
  • memorizzazione password (nessuna, testo semplice, accesso a un portafoglio esterno ...)
  • supporto offline (nessuno, memorizzazione nella cache aggressiva, su richiesta ...)
  • quanto è facile usare gli allegati? (aggiunta con trascinamento della selezione, download, apertura con emacs o un'altra applicazione ...)
  • istruzioni di installazione (più dettagliate sono, meglio), schermate ...
  • supporto per funzionalità di posta elettronica aggiuntive (archiviazione, filtro, cartelle)
  • supporto per funzionalità correlate aggiuntive (contatti, feed rss) ... non è necessario essere troppo dettagliati qui, a seconda di quanto strettamente la funzione si collega all'e-mail

Le soluzioni che richiedono uno strumento esterno per elaborare la posta sono benvenute, purché l'utente non debba interagire direttamente con il processo esterno.

Esempi: un pacchetto che agisce come un front-end per mutt è in argomento, una soluzione che consente a un utente di Thunderbird per scrivere il suo messaggio usando emacs non è.

Meta post per discussione.

Collegamenti rapidi alle risposte (in ordine alfabetico):


2
Esiste un modo per leggere la posta elettronica con emacs che supporta il trascinamento della selezione per aggiungere un allegato? Questa è la funzione che semplifica davvero la vita con un client di posta elettronica.
Nome

1
@Name Emacs supporta anche il trascinamento della selezione?
PythonNut,

@PythonNut bene, se trascino un file su un buffer, Emacs apre quel file. Quindi, in linea di principio, sembra che Emacs sia in grado di gestire il trascinamento delle chiamate dal sistema.
Nome

@PythonNut Sì, Emacs supporta DnD. Vedi qui e qui .
Basilio

@Nome: trovo che usare helm o edera per selezionare gli allegati sia molto più semplice che trascinarli e rilasciarli, ma è una questione di preferenze personali.
Omar,

Risposte:


40

Uso Mu4e . È ben documentato (anche tramite Info) e, al momento della stesura di questo documento, è stato sviluppato attivamente .

Mu4e viene fornito come componente aggiuntivo di mu , "un insieme di strumenti per gestire Maildir e file di messaggi, in particolare per indicizzare e cercare messaggi di posta elettronica" . Funziona insieme a offlineimap o fetchmail . Uso anche il pacchetto Emacs smtpmail-multi in modo da poter inviare da account diversi con impostazioni diverse. Per una perfetta integrazione con il tuo provider di posta elettronica, dovresti apt-get install ca-certificates. E se vuoi una versione gestita dal pacchetto, puoi prendere mu stesso con apt-get install maildir-utils.

Vengono fornite diverse configurazioni di esempio , inclusa la seguente "configurazione minima":

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

A seconda della configurazione del tuo provider di posta, dovrai fare un po 'di più; e in particolare, dovrai configurare OfflineIMAP o Fetchmail per recuperare effettivamente la posta. Nella mia configurazione, mostrata di seguito, ho impostato tutto per funzionare con due account. Se hai solo bisogno di recuperare da un account, potresti fare riferimento al campione .offlineimaprc incluso nel manuale mu4e.

Per quanto riguarda le estensioni e l'integrazione con altri pacchetti di Emacs: Mu4e si integra comodamente con la modalità Org (per l'acquisizione di collegamenti a messaggi o le ricerche personalizzate, e anche per l'authoring HTML messaggi di posta elettronica formattati utilizzando la sintassi Org, anche se io non uso questa caratteristica) attraverso la dotazione org -mu4e.el . C'è un'integrazione helm-mu separata che è utilizzabile, ma ha bisogno di un po 'più di lavoro IMO. È a tema in solarized.el . C'è anche un'estensione mu4e-maildirs che fornisce un conteggio conveniente di messaggi letti e non letti per directory di posta, e ci sono altre cose che non ho provato.

Insieme ai documenti, queste configurazioni di esempio possono aiutare un nuovo utente mu4e a decollare.

.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 per mu4ee 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)

screenshot: navigazione con l'elenco dei termini di ricerca: emacs-orgmode.gnu.org

sfogliando l'elenco delle organizzazioni


1
Supporta emacs di Windows?
Leu_Grady,

1
@ user3173715, OfflineIMAP non supporta ufficialmente Windows "ma alcuni l'hanno fatto funzionare"; Fetchmail è un'altra opzione e fa parte di questa porta Unixmail per Windows ; mu stesso è "scritto in C e un po 'di C ++ (per interfacciarsi con Xapian)", che ha "due opzioni per il supporto nativo di Microsoft Windows". Se ti senti a tuo agio nel mettere insieme frammenti di codice del genere, è molto probabile che riesca a farlo funzionare. Non sono un utente Windows, quindi non posso dirti di più, forse qualcun altro potrebbe commentare ulteriormente.
Joe Corneli,

2
Esiste un sito Web che spiega perché un utente gnus vorrebbe passare o è passato a mu4e e perché? Sono curioso, sembra popolare al momento.
politza,

2
@Malabarba, ho aggiunto la "configurazione minima" dai documenti mu4e e collegato al loro semplice esempio di .offlineimaprc.
Joe Corneli,

2
Una caratteristica importante o un compromesso, a seconda di come un utente può vederlo, è che il mu server è in esecuzione tutto il tempo dopo l'avvio mu4ee questo influisce notevolmente sulle prestazioni di Emacs nei miei test e impedisce l'utilizzo di altre utilità come l'apertura di un altro buffer che deve utilizzare aspell. La comunicazione con il mu server è una funzionalità integrata e non può essere disabilitata. A mio avviso, è un difetto di progettazione che avrebbe dovuto essere corretto con le singole chiamate musenza eseguire un server 24 ore su 24, 7 giorni su 7. Per verificare, digitare M-x list-processesdopo l'esecuzioneM-x mu4e
elenco delle leggi

24

Se usi Gnus (già in bundle con Emacs), controlla https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/gnus-guide-en.org

Ecco il riassunto della guida:

  • Utilizzare configurazione minima da EmacsWiki è sufficiente ( http://www.emacswiki.org/emacs/GnusGmail ). È configurato per qualsiasi servizio di posta, non solo Gmail
  • Puoi leggere / scrivere posta html
  • È necessario sottoscrivere manualmente le cartelle di posta
  • Premi C-u Entersu qualsiasi cartella di posta per vedere TUTTI gli elementi in quella cartella, oppure sono visibili solo i messaggi non letti
  • protocolli e metodi di autenticazione popolari sono supportati per impostazione predefinita
  • per l'archiviazione della password, ho appena usato easygpg in bundle con Emacs. easygpg è un framework generale. Quindi la password è crittografata e archiviata offline.
  • la cache locale e-mail offline è supportata in Gnus anni fa
  • aggiungere / rimuovere / scaricare allegati è facile. Non conosco il trascinamento della selezione perché utilizzo solo la tastiera. È necessario impostare 'mailcap-mime-data` per aprire l'allegato con applicazioni di terze parti.
  • la ricerca della posta locale / in remoto è supportata immediatamente
  • filtro / archivio è supportato. Ma suggerisco popfile che è un software di filtro della posta indipendente. Uso popfile perché è molto meglio di qualsiasi altro filtro di posta (il filtro di Gmail, per esempio).
  • La gestione dei contatti è gestita da bbdb (un altro plug-in Emacs), inoltre è facile importare i contatti da Gmail utilizzando gmail2bbdb.el (scritto da me).
  • Per la lettura di rss, è meglio usare elfeed (Gnus può farlo utilizzando il servizio Gwene, ma elfeed è facile da configurare e ha più funzionalità pronte all'uso). Gwene è potente ma richiede molta più conoscenza (la mia guida Gnus, API di emacs-w3m, hydra, programmazione Lisp, strumenti di cli di Linux, shell)
  • Gnus supporta tutte le piattaforme. Ma su Windows, devi aggiungere binario da OpenSSH e GnuTLS alla variabile di ambiente PATH. Questi due pacchetti potrebbero essere installati tramite Cygwin. Emacs potrebbe essere la versione nativa di Windows. Da Emacs 26, tutte le dipendenze sono raggruppate in un unico pacchetto.

Consulta la mia guida per ulteriori suggerimenti.

IMO, è meglio non sostituire l'interfaccia utente Web di Gmail (o l'interfaccia utente Web di qualsiasi altro servizio di posta) con Gnus completamente. La migliore pratica per padroneggiare Gnus è considerare Gnus come un potenziamento di Gmail. Quindi non sarai frustrato se Gnus può fare determinate cose perché puoi sempre eseguire il fallback sull'interfaccia utente web.

Immagine dello schermo:

inserisci qui la descrizione dell'immagine


4
Grazie per aver aggiunto gnus all'elenco, sembra essere uno dei modi canonici di usare la posta elettronica con emacs. Ma al momento, questa risposta è a malapena più di una risposta solo link. Sarebbe più utile estrarre informazioni da quel link (o altrove!) Per rispondere alla domanda in modo più preciso: oltre a prevenire la decomposizione del link, aiuterebbe anche nel confronto con altri pacchetti di posta.
T. Verron,

Inoltre, uno screenshot sarebbe fantastico in modo che i nuovi visitatori possano facilmente avere un'idea dell'aspetto.
Joe Corneli,

11

Non tanto

Non uso molto per le mie e-mail in emacs.

screenshot della vista non troppo ciao

Funziona solo su mail locali che dovevano essere memorizzate un messaggio per file e utilizzo le cartelle maildir alle quali consegna il mio server smtp. Dovrebbe essere in grado di far fronte ad altre soluzioni sincronizzando la posta con le cartelle maildir sul tuo computer.

Per iniziare a usarlo, installa la riga di comando e l'interfaccia emacs e inizia a configurare tramite una procedura guidata di testo breve chiamando notmuch, imposta una chiamata normale a uno script di filtro che chiama notmuch newe tagga altre mail dai thread che hai taggato (ad esempio la mailing list thread che desideri ignorare) o tagga le mail ordinate dal tuo demone della posta in speciali madrine. In emacs chiami M-x notmuchper vedere l'interfaccia da prima. Quasi tutta la configurazione per l'interfaccia può essere effettuata tramite l'interfaccia di personalizzazione da emacs.

Poiché non scarica messaggi da altri sistemi, non ha autenticazione o protocolli integrati, a parte l'utilizzo del supporto integrato emacs per l'invio di e-mail.

Non utilizza le cartelle in quanto tali, ma in pratica le ricerche memorizzate sembrano simili a quelle per la lettura della posta. Elenca tutti i tag utilizzati nella vista nothuch-hello, in modo che quando decidi come taggare la tua posta le tue liste vengano automaticamente aggiornate. Non ha bisogno di archiviazione in quanto non dovrebbe rallentare quando hai molte e-mail.

La parte elisp di notmuch si distingue dalle veloci possibilità di ricerca full-text e con tag e con ambito per elencare le corrispondenze e rispondere ai messaggi. Non so come funzionerebbe il trascinamento della selezione, dato che lo uso tramite terminali e shell remote sul mio server.

Visualizzazione dei messaggi all'interno di un thread di messaggi

visualizzazione ad albero alternativa dei risultati della ricerca

più screenshot: https://notmuchmail.org/screenshots/

La parte più difficile a riguardo sarebbe avere un tag sincronizzato quando non si usa molto su 2 computer diversi, ma le persone hanno lavorato su questo, e da quello che ho raccolto dalla mailing list probabilmente funziona ora. O dai un'occhiata a https://notmuchmail.org/remoteusage/ per una nuova configurazione su cui mi sono appena imbattuto.

Ci sono pacchetti per la maggior parte delle distribuzioni di Linux ed è sviluppato in un ambiente bazar tramite la mailing list. Se esegui la compilazione automatica da tarball o git, utilizza il codice C e ha dipendenze da Xapian per la memorizzazione degli estratti dai messaggi, GMime per la decodifica delle e-mail MIME, Talloc per la gestione della memoria e zlib (che è anche una dipendenza di Xapian) .

Probabilmente funzionerebbe bene con rss2email o qualsiasi soluzione che converte i feed rss in maildir.

È utilizzabile dalla riga di comando e, a parte l'interfaccia predefinita di emacs elisp, altre persone lo usano con mutt (copia / hardlink i risultati della ricerca in una cartella maildir sul disco) o vim.

Avrà probabilmente bisogno di un po 'di manutenzione per continuare a funzionare se il tuo volume di posta supera il mio (~ 90k messaggi, non molta posta).


1
Emacs Notmuch è piacevole da usare, molto potente, molto veloce e abbastanza semplice da imparare e configurare (molto più semplice di Gnus). Sono molto soddisfatto. Tuttavia, non ho testato Mu4e, mew o Wanderlust. Comunque, ecco alcuni bei articoli: lwn.net/Articles/705856 wwwtech.de/articles/2016/jul/my-personal-mail-setup
Jorge,

6

Sono stato un utente felice di mew per molti anni.

Non uso Emacs per leggere e scrivere posta da molto tempo ormai, quindi questa informazione potrebbe non essere aggiornata. Speriamo che gli utenti di mew più recenti possano compilarlo. Per ora, considera questa risposta un troncone. (Lo trasformerò in wiki della community, in modo che altri possano modificarlo più liberamente.)

Innanzitutto, nella mia esperienza, il mew è stato veloce . Non ho avuto difficoltà a gestire mailing list con traffico enorme usando mew.

L'impostazione di mew è stata un po 'complicata, soprattutto perché utilizza (usato?) stunnelPer creare connessioni crittografate a server SMTP e IMAP. Ma fondamentalmente, comporta solo la modifica di un file ~/.mew.ele l'impostazione di una directory per mew in cui conservare i suoi dati. A parte stunnel(ed emacs, ovviamente), non ha dipendenze.

La documentazione sembra adeguata, anche se spesso mi sono trovato a cercare nella sezione sbagliata. Tuttavia, la manutenzione sembra aver rallentato. Di tanto in tanto ci sono alcune correzioni di bug, ma nessuna nuova funzionalità che ho notato per un po '.


Fornirei maggiori dettagli, ma come ho già detto, non uso Emacs per la posta da molto tempo. Principalmente a causa del diluvio di e-mail formattate solo in HTML, che a lungo andare è diventato un grosso problema per la parte posteriore. Quindi in questi giorni utilizzo solo client di posta elettronica basati sulla GUI.
Harald Hanche-Olsen,

Grazie per averlo elencato, si spera che un altro utente di miagolio possa entrare e riempire gli spazi vuoti. A proposito di e-mail in formato HTML, forse la situazione è generalmente cambiata ora che Emacs viene fornito con un renderer HTML?
T. Verron,

@ T.Verron Potrebbe essere. Sono abbastanza sicuro che mew non supporti il ​​renderizzatore html integrato pronto all'uso. Una grande domanda, tuttavia, è come gestire le immagini in linea? Se sono collegamenti ad immagini esterne, nessun problema, ma che dire delle immagini incluse nel messaggio? A proposito, può essere configurato per mostrare la posta in codice HTML usando w3m, ma non sono mai riuscito a provarlo.
Harald Hanche-Olsen,

5

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

CARATTERISTICHE:

  • Implementazione solo in elisp.
  • Supporto di IMAP4rev1, NNTP, POP (POP3 / APOP), MH e Maildir.
  • Accesso integrato ai messaggi basato su specifiche delle cartelle come Mew.
  • Associazioni chiave e elaborazione dei segni come Mew.
  • Gestione di thread e messaggi non letti.
  • Modalità cartella per selezionare e modificare le cartelle sottoscritte.
  • Cache messaggi, operazione disconnessa.
  • Fcc simile a MH (Fcc:% backup è possibile).
  • Pieno supporto di MIME (da SEMI).
  • Modifica bozze di posta e notizie come una stessa interfaccia.
  • Interfaccia basata su icone per l'elenco delle cartelle (XEmacs e> = Emacs 21).
  • Salta il recupero di una parte di messaggio di grandi dimensioni di MIME (IMAP4).
  • È disponibile la ricerca lato server (IMAP4), la ricerca internazionalizzata.
  • Cartella virtuale, incluse, a titolo esemplificativo, ricerche personalizzate tramite Wanderlust o utilità esterne come mue grep.
  • Cartella compressa.
  • Scadenza automatica di vecchi messaggi.
  • Refiling automatico.
  • Bozze di modelli.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.