mu4e - wiele kont

22

Korzystam mu4ez poczty e-mail w Emacsie, a obecnie jest ona skonfigurowana tylko dla jednego konta pocztowego i ustawiam klucz, aby wyświetlić inną skrzynkę odbiorczą. Zastanawiam się, jak używać mu4e do zarządzania wieloma kontami e-mail?

yi.tang.uni
źródło

Odpowiedzi:

17

Używam mu4e z dwoma kontami. Każde konto ma własny katalog mailowy:

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

Instrukcja zawiera przykładową funkcję wyboru konta:

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

Aby to zadziałało, potrzebujesz również 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))

Możesz po prostu przełączać się między folderami poczty za pomocą j, o ile wszystkie twoje adresy są podkatalogami mu4e-maildir.

W rzeczywistości używam bardziej rozbudowanej funkcji mu4e-trash-folderi mu4e-refile-folderaby uniknąć przenoszenia wiadomości e-mail z jednego katalogu do drugiego, ale powyższe informacje powinny być wystarczające do korzystania z wielu kont.

rekado
źródło
Próbuję zrozumieć, skąd mu4e wie, którą skrzynkę odbiorczą pokazać. Nie ma żadnej mu4e-inbox-folderzmiennej, a kiedy nacisnę ji, otrzymuję pocztę przychodzącą ze wszystkich moich kont, nie tylko z pracy lub prywatnego kontekstu.
AstroFloyd
6

Używam dwóch różnych kont, które chcę jak najmniej mieszać.

offlineimap jest skonfigurowany z dwoma kontami, z których jedno dostarcza pocztę do ~/.maildir-workdrugiego do ~/.maildir-home.

Moja konfiguracja dla mu4e wykorzystuje nowy mechanizm kontekstowy:

(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
źródło
Mam problem z uruchomieniem tego przykładu. Za docs się mu4e-maildiri mu4e-mu-homezmienne nie mają być zmieniane bez wychodzenia mu4e pierwszy. Tutaj zamieściłem trochę więcej szczegółów na temat mojej konfiguracji.
kostajh
Rzeczywiście, musiałem uciekać się do restartowania Emacsa podczas przełączania. Dla mnie to wciąż jest tego warte.
Magnus
2

Używam konfiguracji bardzo podobnej do Magnusa i chciałem tylko dodać, że (mu4e-quit)istnieje i działa dobrze do czyszczenia kont bez ponownego uruchamiania. Rzeczywisty mechanizm:

(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
źródło