email – Intentando separar el correo electrónico privado y de trabajo usando contextos mu4e en emacs

Pregunta:

Estoy luchando para que mu4e funcione con diferentes cuentas de correo electrónico (privadas y laborales). El comportamiento es diferente de lo que esperaba, y no estoy seguro de si esto se debe a un problema en mi configuración o en mis expectativas 🙂

Aprender a instalar, configurar y usar offlineimap , mu y mu4e llevó una o dos horas para mi cuenta privada, y desde entonces he estado luchando durante todo un día para que funcione con una segunda cuenta, Work. Sincronizar e indexar el correo electrónico del trabajo no es un problema, pero presentar y, en particular, separar los correos electrónicos de las dos cuentas. Creo que he leído todas las publicaciones sobre SO que mencionan mu4e y el context , el manual de mu4e , las preguntas frecuentes y problemas de GitHub, muchos blogs, y he visto muchos ejemplos, pero ninguna combinación de ninguno de ellos parece funcionar. Sin embargo, es posible que todavía me haya perdido algo obvio.

Configuraciones actuales

Mis directorios están configurados de la siguiente manera:

~/.emacs_mail
├── PrivateEmail
│   ├── Drafts
│   ├── Sent
│   ├── Trash
│   └── INBOX
└── WorkEmail
    ├── Drafts
    ├── INBOX
    ├── Sent
    └── Trash

offlineimap le pide a offlineimap que sincronice el correo electrónico de mi servidor privado y mi cuenta con la subcarpeta PrivateEmail , y de mi servidor de trabajo y mi cuenta con WorkEmail . mu4e le indica a mu4e que mu4e-maildir es ~/.emacs_mail/ y estoy tratando de usar contextos para separar los dos. La parte mu4e de mi inicio de emacs se muestra aquí (los dos bloques de contexto son casi idénticos en estructura y tienen una superposición idéntica, porque quiero agregar más cuentas de correo electrónico más adelante):

(require 'mu4e)
(setq mail-user-agent 'mu4e-user-agent)
(setq message-kill-buffer-on-exit t)
(require 'smtpmail)
(setq mu4e-headers-skip-duplicates t)
(setq mu4e-compose-format-flowed t)
(setq mu4e-headers-date-format "%Y-%m-%d %H:%M")
(setq mu4e-headers-fields
    '( (:date    .  25)    ;; use :date  / :human-date
       (:flags   .   6)
       (:from    .  22)
       (:subject .  nil)   ;; use :subject / :thread-subject
       )
    )
(setq mu4e-user-mail-address-list '("private@email.org"
                                    "me@work.com")
      )
(setq mu4e-maildir "~/.emacs_mail")
(setq mu4e-contexts
      `(
        ;; Private context:
        ,(make-mu4e-context
          :name "Private"
          :enter-func (lambda () (mu4e-message "Entering Private context"))
          :leave-func (lambda () (mu4e-message "Leaving Private context"))
          :match-func (lambda (msg)
                        (when msg
                          (mu4e-message-contact-field-matches msg
                                                              :to "private@email.com")
                          )
                        )
          :vars '(
                  ( mu4e-drafts-folder . "/PrivateEmail/Drafts" )
                  ( mu4e-sent-folder   . "/PrivateEmail/Sent" )
                  ( mu4e-trash-folder  . "/PrivateEmail/Trash" )
                  ( mu4e-maildir-shortcuts .
                                           (
                                            ("/INBOX"  . ?i)
                                            ("/Sent"   . ?s)
                                            ("/Trash"  . ?t)
                                            )
                                           )
                  ( user-mail-address      . "private@email.com" )
                  ( user-full-name         . "My Name" )
                  ( mu4e-compose-signature .
                                           (concat
                                            "My Name\n"
                                            "http://private.org\n"
                                            )
                                           )
                  ( mu4e-sent-messages-behavior  . 'delete )
                  ( mu4e-get-mail-command        . "offlineimap" )  ;; Alternatives: fetchmail, getmail, isync, ...
                  ( message-send-mail-function   . 'smtpmail-send-it )
                  ( smtpmail-stream-type         . 'starttls )
                  ( smtpmail-default-smtp-server . "smtp.email.com" )
                  ( smtpmail-smtp-server         . "smtp.email.com" )
                  ( smtpmail-smtp-service        .  587)
                  )  ;; vars
          )  ;; Private
        ;; Work context:
        ,(make-mu4e-context
          :name "Work"
          :enter-func (lambda () (mu4e-message "Entering Work context"))
          :leave-func (lambda () (mu4e-message "Leaving Work context"))
          :match-func (lambda (msg)
                        (when msg
                          (mu4e-message-contact-field-matches msg
                                                              :to "me@work.com")
                          )
                        )
          :vars '(
                  ( mu4e-drafts-folder . "/WorkEmail/Drafts" )
                  ( mu4e-sent-folder   . "/WorkEmail/Sent" )
                  ( mu4e-trash-folder  . "/WorkEmail/Trash" )
                  ( mu4e-maildir-shortcuts .
                                           (
                                            ("/INBOX"   . ?i)
                                            ("/Sent"    . ?s)
                                            ("/Trash"   . ?t)
                                            ("/Drafts"  . ?d)
                                            )
                                           )
                  ( user-mail-address      . "me@work.com" )
                  ( user-full-name         . "My Full Name" )
                  ( mu4e-compose-signature .
                                           (concat
                                            "Visiting address:\n"
                                            "Room B2.70\n"
                                            )
                                           )
                  ( mu4e-sent-messages-behavior  . 'delete )
                  ( mu4e-get-mail-command        . "offlineimap" )
                  ( message-send-mail-function   . 'smtpmail-send-it )
                  ( smtpmail-stream-type         . 'starttls )
                  ( smtpmail-default-smtp-server . "smtp.work.com" )
                  ( smtpmail-smtp-server         . "smtp.work.com" )
                  ( smtpmail-smtp-service        .  587)
                  )  ;; vars
          )  ;; Work
        )
      )
(add-to-list 'mu4e-bookmarks
             (make-mu4e-bookmark
              :name  "PrivateEmail unread inbox"
              :query "flag:unread AND maildir:/PrivateEmail/INBOX AND NOT flag:trashed"
              :key ?p)
             )

(Usé sed para anonimizar este archivo y eliminar líneas en blanco (muchas, para facilitar la lectura) y líneas que comienzan con ;; ).

Comportamiento actual

Cuando (re) comienzo emacs (con o sin usar -q y cargando manualmente mi mu4e.el) y comienzo mu4e, tengo que elegir entre los contextos Privado y Trabajo como se esperaba. Sin embargo, cuando presiono ji , obtengo una lista de encabezados de correo electrónico tanto de mi contexto privado como de trabajo, donde esperaría solo encabezados del contexto actual. Por lo tanto, obtengo resultados idénticos, independientemente del contexto actual.

O, tal vez, esperaría no ver nada en absoluto, ya que según mi init el acceso directo ji refiere a /INBOX mu4e-maildir wrt el mu4e-maildir , es decir, al directorio ~/.emacs_mail/INBOX/ , que no existe. De hecho, originalmente configuré los maildir-shortcuts a "/ PrivateEmail / INBOX", etc., pero eso no funciona en absoluto – obtengo una lista de encabezados vacía – supongo que mu4e piensa que el directorio ~/.emacs_mail/PrivateEmail/INBOX/ no existe. Además, presionar s para buscar maildir:/INBOX 'funciona' (aunque todavía obtengo encabezados de ambas cuentas, contrariamente a mi deseo) mientras que maildir:/PrivateEmail/INBOX no (lista vacía).

Probablemente por la misma razón, el marcador que definí al final del archivo también produce una lista vacía. Cuando /PrivateEmail parte /PrivateEmail , la lista de encabezados está llena de correos electrónicos de ambas cuentas …

Entender los contextos

Lo que no ayuda es el hecho de que, según el manual de mu4e , no entiendo qué se supone que deben lograr exactamente los contextos, y creo que lo fundamental es que :match-func . ¿Se supone que :match-func filtra los correos electrónicos por mí, de modo que cuando enumere los encabezados de mi bandeja de entrada, solo vea los del contexto actual? ¿O debería :match-func only (ayudar a) determinar qué cuenta usar cuando, por ejemplo, responda a un correo electrónico? La variable obvia que quería establecer de manera diferente en mis diferentes contextos era mu4e-maildir , pero de acuerdo con los documentos, se supone que no debo hacer eso (y tendría que reiniciar mu4e o incluso emacs, lo que me gustaría evitar (en ese caso, podría escribir un script para cambiar el nombre de los mu4e correo electrónico antes de iniciar mu4e )).

Comportamiento deseado

Idealmente, me gustaría lograr eso cuando estoy en el trabajo, cambiaría al contexto de Trabajo y solo trataría con el correo electrónico de Trabajo (entrante, saliente, otros cuadros que he enviado aquí, lo que sea). Cuando presionaba ji , veía mi bandeja de entrada de Trabajo , y cuando presionaba bu , solo recibía correos electrónicos de trabajo no leídos. Cuando volvía a casa, pulsaba ;p y no volvía a ver un correo electrónico del trabajo. Y podría agregar otras ~ 3-5 cuentas de correo electrónico que no se mezclarían. ¿Son estos deseos realistas? ¿Cómo podría lograrlos o acercarme lo más posible? ¿Me acabo de perder una configuración vital en mi inicio?

Más curioso y más curioso

Con mi acceso directo ("/Private/Sent" . ?s) , cuando intento mover un correo electrónico a ese cuadro usando ms y x , ~/.emacs_mail/Private/Private/Sent/... un error que ~/.emacs_mail/Private/Private/Sent/... que el correo no se pudo mover a ~/.emacs_mail/Private/Private/Sent/... Por lo tanto, cambié el acceso directo a ("/Sent" . ?s) que arroja el error de que el correo no se pudo mover a ~/.emacs_mail/Sent/... No estoy seguro de cómo conseguir un solo /Private allí, en lugar de cero o dos. Las barras inclinadas no marcan la diferencia …

Ambiente

Gentoo Linux, GNU emacs 26.1, mu (4e) 1.3.1.

Respuesta:

Hubo una serie de problemas (principalmente mi ignorancia) que causan al menos algunos de mis problemas. Dado que esto podría sucederle a otros, publicaré las soluciones aquí. Las cosas parecen estar funcionando bien actualmente con tres cuentas diferentes.

Mezcla de correos electrónicos de diferentes cuentas

La mezcla de correos electrónicos ocurrió porque comencé con una cuenta y agregué otra más tarde. Ya había indexado ~/.emacs_mail/PrivateEmail e ~/.emacs_mail después de agregar la segunda cuenta / subdirectorio. Eso arruinó la base de datos de mu . rm -rf ~/.mu/ e indexando solo ~/.emacs_mail solucionó eso.

Mezcla de correos electrónicos de diferentes maildirs en una cuenta

Sin embargo, después de la corrección anterior, mis saltos estrictos a un cuadro en particular (usando, por ejemplo, ji ) también mostraron correos electrónicos de otros cuadros. Ya había apagado la visualización de hilos (usando (setq mu4e-headers-show-threads nil) o P ), pero resulta que mu4e muestra por defecto todos los correos electrónicos en el directorio seleccionado y todos los demás correos electrónicos que comparten un hilo con ellos. . (setq mu4e-headers-include-related nil) solucionó eso para mí. Me tomó mucho tiempo darme cuenta de esto …

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım