mu4e - cuentas múltiples

22

Estoy usando el mu4ecorreo electrónico en Emacs, y actualmente solo está configurado para una cuenta de correo, y configuré la clave para ver diferentes bandejas de entrada. Me pregunto cómo usar mu4e para administrar múltiples cuentas de correo electrónico.

yi.tang.uni
fuente

Respuestas:

17

Estoy usando mu4e con dos cuentas. Cada cuenta tiene su propio maildir:

~/Mail
|
+---- work
|
`---- private

El manual viene con una función de ejemplo para elegir una cuenta:

(defun my-mu4e-set-account ()
  "Set the account for composing a message."
  (let* ((account
          (if mu4e-compose-parent-message
              (let ((maildir (mu4e-message-field mu4e-compose-parent-message :maildir)))
                (string-match "/\\(.*?\\)/" maildir)
                (match-string 1 maildir))
            (completing-read (format "Compose with account: (%s) "
                                     (mapconcat #'(lambda (var) (car var))
                                                my-mu4e-account-alist "/"))
                             (mapcar #'(lambda (var) (car var)) my-mu4e-account-alist)
                             nil t nil nil (caar my-mu4e-account-alist))))
         (account-vars (cdr (assoc account my-mu4e-account-alist))))
    (if account-vars
        (mapc #'(lambda (var)
                  (set (car var) (cadr var)))
              account-vars)
      (error "No email account found"))))

;; ask for account when composing mail
(add-hook 'mu4e-compose-pre-hook 'my-mu4e-set-account)

Para que eso funcione, también necesitarás my-mu4e-account-alist:

(defvar my-mu4e-account-alist
  '(("private"
     (user-mail-address  "[email protected]")
     (user-full-name     "My Name")
     (mu4e-sent-folder   "/private/Sent Items")
     (mu4e-drafts-folder "/private/Drafts")
     (mu4e-trash-folder  "/private/Deleted Items")
     (mu4e-refile-folder "/private/Archive"))
    ("work"
     (user-mail-address  "[email protected]")
     (mu4e-sent-folder   "/work/Sent Items")
     (mu4e-drafts-folder "/work/Drafts")
     (mu4e-trash-folder  "/work/Deleted Items")
     (mu4e-refile-folder "/work/Archives"))))

(setq mu4e-user-mail-address-list
      (mapcar (lambda (account) (cadr (assq 'user-mail-address account)))
              my-mu4e-account-alist))

Simplemente puede cambiar entre carpetas de correo con j, siempre y cuando todos sus maildirs sean subdirectorios de mu4e-maildir.

En realidad estoy usando una función más elaborado para mu4e-trash-foldery mu4e-refile-folderpara evitar mover los mensajes de una carpeta de correo a otra, pero la información anterior debería ser suficiente para utilizar varias cuentas.

rekado
fuente
Me cuesta comprender cómo mu4e sabe qué bandeja de entrada mostrar. No hay ninguna mu4e-inbox-foldervariable, y cuando presiono jirecibo correo entrante de todas mis cuentas, no solo del trabajo o del contexto privado.
AstroFloyd
6

Estoy usando dos cuentas diferentes que quiero mezclar lo menos posible.

offlineimap está configurado con dos cuentas, una entregando correo en ~/.maildir-workla otra ~/.maildir-home.

Mi configuración para mu4e usa el nuevo mecanismo de contexto:

(setq mu4e-contexts
      `( ,(make-mu4e-context
           :name "home"
           :match-func (lambda (_) (string-equal "home" (mu4e-context-name mu4e~context-current)))
           :enter-func '()
           :leave-func (lambda () (mu4e-clear-caches))
           :vars '((mu4e-maildir . "~/.maildir-home")
                   (mu4e-mu-home . "~/.mu-home")
                   (mu4e-get-mail-command . "offlineimap -a Home")
                    ...))
         ,(make-mu4e-context
           :name "work"
           :match-func (lambda (_) (string-equal "work" (mu4e-context-name mu4e~context-current)))
           :enter-func '()
           :leave-func (lambda () (mu4e-clear-caches))
           :vars '((mu4e-maildir . "~/.maildir-work")
                   (mu4e-mu-home . "~/.mu-work")
                   (mu4e-get-mail-command . "offlineimap -a Work")
                   ...))))
Magnus
fuente
Tengo problemas para que este ejemplo funcione. Por los documentos de los mu4e-maildiry mu4e-mu-homeno se supone que las variables para poder sustituirse sin dejar de mu4e primero. Publiqué un poco más de detalle aquí en mi configuración.
kostajh
De hecho, he tenido que recurrir a reiniciar Emacs al cambiar. Para mí eso todavía vale la pena.
Magnus
2

Estoy usando una configuración muy similar a la de Magnus, y solo quería agregar que (mu4e-quit)existe, y funciona bien para limpiar cuentas sin reiniciar. Mecanismo real:

(defun mail-gmail ()
  (interactive)
  (setenv "MAILDIR" "/Users/foo/Maildir/gmail")
  (setenv "MU_HOME" "/Users/foo/.mu/gmail")
  (setq mu4e-maildir "/Users/foo/Maildir/gmail")
  (setq user-mail-address "...")
  (mu4e-quit))
Lang Martin
fuente