mu4e - plusieurs comptes

22

J'utilise mu4epour le courrier électronique dans Emacs, et il n'est actuellement configuré que pour un compte de messagerie, et j'ai défini la clé pour afficher différentes boîtes de réception. Je me demande comment utiliser mu4e pour gérer plusieurs comptes de messagerie?

yi.tang.uni
la source

Réponses:

17

J'utilise mu4e avec deux comptes. Chaque compte a son propre maildir:

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

Le manuel est livré avec un exemple de fonction pour choisir un compte:

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

Pour que cela fonctionne, vous aurez également besoin de 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))

Vous pouvez simplement basculer entre les dossiers de messagerie avec j, tant que tous vos répertoires de messagerie sont des sous-répertoires de mu4e-maildir.

J'utilise en fait une fonction plus élaborée pour mu4e-trash-folderet mu4e-refile-folderpour éviter de déplacer des e-mails d'un maildir vers un autre, mais les informations ci-dessus devraient être suffisantes pour utiliser plusieurs comptes.

rekado
la source
J'ai du mal à comprendre comment mu4e sait quelle boîte de réception afficher. Il n'y a pas de mu4e-inbox-foldervariable, et lorsque j'appuie sur, jije reçois du courrier entrant de tous mes comptes, pas seulement du travail ou du contexte privé.
AstroFloyd
6

J'utilise deux comptes différents que je souhaite mélanger le moins possible.

offlineimap est configuré avec deux comptes, l'un livrant le courrier à ~/.maildir-workl'autre ~/.maildir-home.

Ma configuration pour mu4e utilise le nouveau mécanisme de contexte:

(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
la source
J'ai du mal à faire fonctionner cet exemple. D'après les documents, les variables mu4e-maildiret mu4e-mu-homene sont pas censées être modifiables sans quitter mu4e au préalable. J'ai posté un peu plus de détails ici sur ma configuration.
kostajh
En effet, j'ai dû recourir au redémarrage d'Emacs lors de la commutation. Pour moi, cela en vaut toujours la peine.
Magnus
2

J'utilise une configuration très similaire à celle de Magnus, et je voulais juste ajouter qu'elle (mu4e-quit)existe, et cela fonctionne très bien pour nettoyer les comptes sans redémarrer. Mécanisme réel:

(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
la source