Τὸ ἠλεκτρονικὸ ταχυδρομεῖο, μίσησέ το ἢ ἀγάπησέ το, ὅλοι πρέπει νὰ τὸ ἀντιμετωπίσουμε. Εὐτυχῶς, χάρη στὸν Ἤμαξ καὶ τὸ mu4e μπορεῖς νὰ δουλεύεις μὲ τὸ ἠλεκτρονικὸ ταχυδρομεῖο παραγωγικὰ καί, τολμῶ νὰ πῶ, εὐχάριστα.

Σχετικά

Σὲ αὐτὸν τὸν ὁδηγὸ θὰ σὲ καθοδηγήσω στὴν ἐγκατάσταση mu4e μὲ πολλαπλοὺς λογαριασμούς, χρησιμοποιώντας isync καὶ mu, καθὼς καὶ στὰ βασικὰ τοῦ πῶς νὰ ἐνσωματώσεις τὸ mu4e στὴ ροὴ ἐργασίας σου, συν συμβουλὲς καὶ κόλπα ὅπως χρήση ἐνεργειῶν τοῦ mu4e γιὰ ἐφαρμογὴ διορθώσεων Git.

Γιὰ νὰ ἀκολουθήσεις αὐτὸν τὸν ὁδηγό, βεβαιώσου ὅτι ἔχεις ἐνεργοποιήσει πρόσβαση IMAP/SMTP γιὰ τὸν λογαριασμὸ ἠλεκτρονικοῦ ταχυδρομείου σου. Τὰ βήματα ἐνεργοποίησης μπορεῖ νὰ διαφέρουν ἀνάλογα μὲ τὸν συγκεκριμένο πάροχο ἠλεκτρονικοῦ ταχυδρομείου, ὁπότε δὲν θὰ τὰ καλύψω ἐδῶ.

Γιατί mu4e;

Ὑπάρχουν πολλαπλὲς ἐπιλογὲς στὸν GNU Ἤμαξ γιὰ διαχείριση ἠλεκτρονικοῦ ταχυδρομείου, ὅπως rmail, gnus, notmuch καὶ mu4e.

Καθεμία ἀπὸ αὐτὲς τὶς ἐπιλογὲς ἔχει τὶς δικές της πολυπλοκότητες, ἀνάλογα μὲ τὴ συγκεκριμένη περίπτωση χρήσης σου.

Στὴν προσωπική μου ἐμπειρία, προτιμῶ τὸ mu4e λόγω τῆς εὐκολίας ἐγκατάστασης, ἰδίως ὅταν ἔχεις νὰ κάνεις μὲ πολλαπλοὺς λογαριασμούς.

Ἐγκατάσταση MU & isync

Γιὰ νὰ ξεκινήσεις, ἐγκατάστησε mu καὶ isync

  • Arch Linux
$ sudo pacman -S mu isync
  • Gentoo
$ sudo emerge -av mu isync

NOTE: Βεβαιώσου ὅτι χρησιμοποιεῖς emacs USEFLAG γιὰ τὸ mu

Ἂν τὸ mu δὲν εἶναι πακεταρισμένο γιὰ τὴ διανομή σου, συστήνω νὰ ἀλλάξεις σὲ νέα. Ἀλλὰ ἂν ἐπιμένεις, ἴσως ἔχεις ἐπιτυχία ἐγκαθιστώντας mu ἀπὸ πηγή, χρησιμοποιώντας straight.el:

(straight-use-package 'mu4e)

Ρύθμιση mbsync

Ἐπεξεργάσου τὴ διαμόρφωσή σου: ~/.mbsyncrc

Παράδειγμα ρύθμισης γιὰ Fastmail:

IMAPAccount fastmail
Host imap.fastmail.com
Port 993
User [email protected]
PassCmd "emacsclient -e '(password-store-get-field \"fastmail.com/[email protected]\" \"smtp\)'"
SSLType IMAPS
SSLVersions TLSv1.2
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore fastmail-remote
Account fastmail

MaildirStore fastmail-local
Path ~/Mail/Fastmail/
Inbox ~/Mail/Fastmail/Inbox
Trash ~/Mail/Fastmail/Trash/
SubFolders Verbatim

Channel fastmail
Far :fastmail-remote:
Near :fastmail-local:
Patterns *
Expunge None
CopyArrivalDate yes
Sync All
Create Both
SyncState *

Παράδειγμα ρύθμισης γιὰ Gmail:

IMAPAccount gmail
Host imap.gmail.com
Port 993
User [email protected]
PassCmd "pass google/mygmail.com"
SSLType IMAPS
SSLVersions TLSv1.2
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore gmail-remote
Account gmail

MaildirStore gmail-local
Path ~/Mail/Account-GMAIL/
SubFolders Verbatim

Channel gmail
Far :gmail-remote:
Near :gmail-local:
Patterns * ![Gmail]* "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail" "[Gmail]/Trash"
Expunge None
CopyArrivalDate yes
Sync All
Create Both
SyncState *
Settings you should adjust:
  • PassCmd αὐτὸ θὰ πρέπει νὰ ἐξάγει τὸν κωδικὸ τοῦ λογαριασμοῦ σου. Προσωπικὰ χρησιμοποιῶ pass ὡς διαχειριστὴ κωδικῶν.

Στὸ παραπάνω παράδειγμα fastmail παίρνω τὸν κωδικὸ μὲ αὐτὴ τὴ συνάρτηση Ἤμαξ:

(password-store-get-field \"fastmail.com/[email protected]\" \"smtp\)

Τὸ password-store εἶναι διεπαφὴ τοῦ pass γιὰ τὸν Ἤμαξ.

NOTE: Ἀντὶ γιὰ PassCmd, μπορεῖς νὰ χρησιμοποιήσεις Pass ποὺ ἁπλῶς ἔχει τὸν κωδικό σου σὲ ἀπλὸ κείμενο, ἀλλὰ δὲν τὸ συστήνω γιὰ λόγους ἀσφαλείας.

  • CertificateFile - Αὐτὴ ἡ τοποθεσία μπορεῖ νὰ διαφέρει ἀνάλογα μὲ τὴ διανομὴ Linux σου.

  • Patterns - Ὁρίζει ποιοὶ φάκελοι θὰ συγχρονιστοῦν· προσωπικὰ ἁπλῶς ὁρίζω τοὺς φακέλους μου χειροκίνητα, παρόμοια μὲ τὸ παράδειγμα fastmail.

Μὴ διστάσεις νὰ ὁρίσεις πολλαπλοὺς λογαριασμοὺς μὲ αὐτὸν τὸν τρόπο.

Μετὰ τὴ διαμόρφωση τοῦ isync, ξεκίνα τὸν ἀρχικὸ συγχρονισμὸ τρέχοντας αὐτὴ τὴν ἐντολή:

$ mbsync -a

Ρύθμιση mu & mu4e

Πρῶτα, πρέπει νὰ τρέξεις τὴν ἀρχικὴ εὐρετηρίαση.

mu init --maildir=~/Mail --my-address [email protected]
mu index

NOTE: Μπορεῖς νὰ προσθέσεις ὅσα ὁρίσματα --my-address θέλεις.

Τώρα εἶναι ὥρα νὰ δημιουργήσεις τὴ διαμόρφωση mu4e γιὰ Ἤμαξ.

Μπορεῖς νὰ τὴ δημιουργήσεις ὡς μονάδα, ἢ ἁπλῶς ὡς μέρος τοῦ :config μὲ use-package. Προσωπικὰ ὁρίζω μεταβλητὲς στὸ init.el μου ἔτσι:

(defvar is-desktop (equal (system-name) "desktop-hostname")) ;; your $HOSTNAME
(defvar is-laptop (equal (system-name) "laptop-hostname"))

Δημιούργησε ~/.emacs.d/modules/thanos-mu4e.el γιὰ τὴ διαμόρφωση μονάδας mu4e. Καὶ πρόσθεσε αὐτὸ στὸ init.el μου

(add-to-list 'load-path "~/.emacs.d/modules")

(when (or is-desktop is-laptop)
  (require 'thanos-mu4e))

Ἔτσι φορτώνω τὴ διαμόρφωση mu4e μόνο ὅταν χρησιμοποιῶ φορητὸ ἢ ἐπιτραπέζιο ὑπολογιστή.

Φόρτωση Mu4e

Βεβαιώσου ὅτι τὸ mu4e εἶναι στὸ load-path:

(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e/") ;; path to mu4e
(require 'mu4e)

Τὰ οὐσιώδη

Αὐτὸ εἶναι ἕνα παράδειγμα διαμόρφωσης γιὰ νὰ ξεκινήσεις μὲ mu4e χρησιμοποιώντας πολλαπλοὺς λογαριασμούς:

(setf mu4e-get-mail-command "mbsync -a")

(when (and is-desktop (server-running-p))
  (setf mu4e-update-interval (* 10 60)))

;; Snippet from EmacsWiki
(defun set-mu4e-context (context-name full-name mail-address signature)
  "Return a mu4e context named CONTEXT-NAME with :match-func matching
    folder name CONTEXT-NAME in Maildir. The context's `user-mail-address',
    `user-full-name' and `mu4e-compose-signature'`smtpmail-smpt-server' is set to MAIL-ADDRESS
    FULL-NAME SIGNATURE and SERVER respectively.
    Special folders are set to context specific folders."
  (let ((dir-name (concat "/" context-name)))
    (make-mu4e-context
     :name context-name
     ;; we match based on the maildir of the message
     :match-func
     `(lambda (msg)
    (when msg
      (string-match-p
       ,(concat "^" dir-name)
       (mu4e-message-field msg :maildir))))
     :vars
     `((user-mail-address    . ,mail-address)
       (user-full-name       . ,full-name)
       (mu4e-sent-folder     . ,(concat dir-name "/Sent"))
       (mu4e-drafts-folder   . ,(concat dir-name "/Drafts"))
       (mu4e-trash-folder    . ,(concat dir-name "/Trash"))
       (mu4e-trash-folder    . ,(concat dir-name "/Starred"))
       (mu4e-refile-folder   . ,(concat dir-name "/Archive"))
       (mu4e-compose-signature . ,signature)))))

;;Fixing duplicate UID errors when using mbsync and mu4e
(setf mu4e-change-filenames-when-moving t)

(setf mu4e-maildir-shortcuts
      '(("/Fastmail/Inbox" . ?f)
    ("/Drafts" . ?d)
    ("/Sent" . ?s)
    ("/Gmail-Account/[Gmail]/All Mail" . ?g)

(setf mu4e-contexts
      (list
       (make-mu4e-context
    :name "fastmail"
    :match-func
    (lambda (msg)
      (when msg
        (string-prefix-p "/Fastmail" (mu4e-message-field msg :maildir))))
    :vars '((user-mail-address . "[email protected]")
        (user-full-name    . "User Name")
        (smtpmail-smtp-server . "smtp.fastmail.com")
        (smtpmail-smtp-service . 465)
        (smtpmail-stream-type . ssl)
        (mu4e-drafts-folder  . "/Drafts")
        (mu4e-sent-folder  . "/Sent")
        (mu4e-refile-folder  . "/Archive")
        (mu4e-trash-folder  . "/Trash")))
        ;; You can comment out the second account.
       (make-mu4e-context
    :name "gmail"
    :match-func
    (lambda (msg)
      (when msg
        (string-prefix-p "/Gmail-Account" (mu4e-message-field msg :maildir))))
    :vars '((user-mail-address . "[email protected]")
        (user-full-name    . "User Name")
        (smtpmail-smtp-server . "smtp.gmail.com")
        (smtpmail-smtp-service . 465)
        (smtpmail-stream-type . ssl)))))

(setf message-send-mail-function 'smtpmail-send-it
      mu4e-compose-signature "My Signature"
      mu4e-compose-context-policy 'ask)

Ἐπιπλέον

Ἐνέργειες Mu4e

Οἱ ἐνέργειες Mu4e καθιστοῦν πραγματικὰ ἁπλὴ τὴν ἐργασία μὲ διορθώσεις Git· αὐτὴ εἶναι ἕνα παράδειγμα διαμόρφωσης ποὺ ἴσως θέλεις νὰ χρησιμοποιήσεις:

(setf mu4e-view-actions
      (delete-dups
       (append
    '(("gapply git patches" . mu4e-action-git-apply-patch)
      ("mgit am patch" . mu4e-action-git-apply-mbox)))))

Ὑπόγραψε τὰ μηνύματα ἠλεκτρονικοῦ ταχυδρομείου σου μὲ pgp

Ἂν ἔχεις ρυθμίσει τὸ δικό σου κλειδὶ pgp, μπορεῖς νὰ ὑπογράφεις αὐτόματα ὅλα τὰ μηνύματα ἠλεκτρονικοῦ ταχυδρομείου σου μὲ αὐτὸ τὸ ἄγκιστρο:

(add-hook 'message-send-hook 'mml-secure-message-sign-pgpmime)

Ρίξε μία ματιὰ στὶς συναρτήσεις ποὺ ὁρίζονται γιὰ mml-mode-map γιὰ περισσότερα.