5.6 KiB
Email Configuration
Initial Setup
Before installing any packages with emacs, there is some initial setup that needs to be done.
Exporting TLS Certificates
After installing the proton-mail-bridge
, you will need to export the certificates by going to Settings > Advanced settings > Export TLS certificates. From here you should place this at the path ~/.config/protonmail/bridge/
.
Mu4e Installation
In this section, I'm setting up mu4e
to give emacs the capability to send emails using my gmail account. To start, you need to install the mu4e
package outside of Emacs.
yay -S mu
After installing the mu
client, I also need to run a initial index using the following command:
mkdir ~/.mail && mbsync -a
mu init --maildir=~/.mail --my-address=jadenprovost@gmail.com
mu index
Custom Functions
(defconst jm/email-filters-path "~/Nextcloud/filters.json")
(defun jm/any-string-match-p (needles haystack)
(when (listp needles)
(let (result)
(dolist (needle needles result)
(setq result (or result (s-matches-p needle haystack)))))))
(defun jm/load-email-filters (msg)
(let ((filters (append (json-read-file jm/email-filters-path) nil))
(trash-flag (member
(car (mu4e-string-to-flags "T"))
(mu4e-message-field msg :flags)))
folder)
(if trash-flag
"/Trash"
(dolist (filter filters)
(let ((subject (mu4e-message-field msg :subject))
(filter-folder (cdr (assoc-string "folder" filter)))
(subject-filters (append (cdr (assoc-string "subject" filter)) nil))
(from-filters (append (cdr (assoc-string "from-contact" filter)) nil))
(bcc-filters (append (cdr (assoc-string "bcc-contact" filter)) nil)))
(when (or (jm/any-string-match-p subject-filters subject)
(mu4e-message-contact-field-matches msg :from from-filters)
(mu4e-message-contact-field-matches msg :bcc bcc-filters))
(setq folder filter-folder))))
(if folder folder "/Archive"))))
Mu4e
This section contains the mu4e
emacs specific configuration.
(use-package mu4e
:ensure nil
:bind ("C-x m" . mu4e)
:config
(add-hook 'mu4e-compose-mode-hook (lambda () (use-hard-newlines -1)))
(setq mu4e-mu-binary (executable-find "mu")
mu4e-change-filenames-when-moving t ; Avoids syncing issues.
mu4e-search-results-limit 2000 ; Extend header view max message count.
mu4e-compose-format-flowed t) ; Disable hard line wrapping
;; Fix message citation style for gmail.
(setq message-cite-style message-cite-style-gmail
message-citation-line-format "On %a, %b %d, %Y at %H:%M %p %f wrote:"
message-citation-line-function 'message-insert-formatted-citation-line)
;; Refresh mail every X seconds. Set to 5 minutes currently
(setq mu4e-update-interval (* 5 60)
mu4e-get-mail-command "mbsync -a"
mu4e-maildir "~/.mail")
;; Config mu4e folders
(setq mu4e-drafts-folder "/Drafts"
mu4e-sent-folder "/Sent"
mu4e-trash-folder "/Trash"
mu4e-refile-folder #'jm/load-email-filters)
;; Config mu4e bookmarks
(setq mu4e-bookmarks
'((:name "Filtered unread messages" :query "flag:unread AND (maildir:/Archive OR maildir:/INBOX) AND NOT flag:trashed" :key ?u)
(:name "All unread messages" :query "flag:unread" :key ?U)
(:name "Today's messages" :query "date:today..now" :key ?t)
(:name "Last 7 days" :query "date:7d..now" :hide-unread t :key ?w)
(:name "Flagged messages" :query "flag:flagged" :key ?f)))
(setq mu4e-maildir-shortcuts
;; Proton folders
'((:maildir "/INBOX" :key ?i)
(:maildir "/Archive" :key ?a)
(:maildir "/Drafts" :key ?d)
(:maildir "/Sent" :key ?s)
(:maildir "/Spam" :key ?S)
(:maildir "/Trash" :key ?t)
;; My folders
(:maildir "/Folders/Finance" :key ?f)
(:maildir "/Folders/Packages" :key ?p)
(:maildir "/Folders/Work" :key ?w)
(:maildir "/Folders/Club" :key ?c)
(:maildir "/Folders/UCSC" :key ?u)
(:maildir "/Folders/Newsletters" :key ?n))))
Adding some configuration to correct mu4e
's default values.
(setq user-full-name "Jaden Provost Maxwell-Comfort")
(setq user-mail-address "jadenprovost@proton.me")
SMTP
In order to send mail with mu4e
, you must also configure an SMTP client. Based on the mu4e
wiki, I was able to shamelessly steal some of the config for the gmail configuration found here.
(use-package smtpmail
:after mu4e
:config
(setq smtpmail-stream-type 'starttls
smtpmail-smtp-server "127.0.0.1"
smtpmail-smtp-service 1025))
(setq send-mail-function 'smtpmail-send-it)
When running this however, you need to authenticate by creating an ~/.authinfo
file. This file is formatted as follows:
# For gmail
machine smtp.gmail.com port 465 login "<USER>" password "<PASS>"
# For Proton Mail
# Copy the remaining information from the proton-mail-bridge for both IMAP and SMTP
machine 127.0.0.1 port <PORT> login "<USER>" password "<PASS>"
machine 127.0.0.1 port <PORT> login "<USER>" password "<PASS>"
Similarly to the password configured above for the IMAP server, you can also pass an authinfo.gpg
file for some added security. If you are using proton mail, make sure this matches the path set in your .mbsyncrc
file.