Email from Spacemacs: my mu4e / org-msg / offlineimap setup


Introduction

I wanted to share my configuration for mu4e / org-msg / offlineimap for Spacemacs OSX Catalina using Gmail.

I am very satisfy with the end result (I would like to fix the image loading problem in the near future but for now I use the view in browser to deal with html heavy email). The interface of Mu4e is perfect for my workflow and org-msg make writing email awesome since I can leverage all my org-mode materials that is sitting in my org-wiki and use all the org-mode power goodies.

OfflineIMAP setup

Warning: I had to fight with the security settings in my google account (see Less secure apps & your Google Account - Google Account Help). I had to click on email security warning sent by gmail also.

brew install offlineimap
brew services start offlineimap
vim ~/.offlineimaprc # see configuration below
offlineimap # test if your config work

~/.offlineimaprc

[general]
ui=TTYUI
accounts = Gmail
autorefresh = 5

[Account Gmail]
localrepository = Gmail-Local
remoterepository = Gmail-Remote

[Repository Gmail-Local]
type = Maildir
localfolders = ~/.Mail/{your-email}@gmail.com


[Repository Gmail-Remote]
type = Gmail
remotehost = imap.gmail.com
remoteuser = {your-email}@gmail.com
remotepass = {your-password}
realdelete = no
ssl = yes
sslcacertfile = /usr/local/etc/openssl/cert.pem
maxconnections = 1
folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
                                            '[Gmail]/Spam',
                                            '[Gmail]/All Mail',]

Consult the master config for more options: offlineimap/offlineimap.conf at master

Warning: offlineimap will obviously download all of the targeted messages so that might result in a lot of data usage...

Spacemacs Configuration

~/.spacemacs

dotspacemacs-configuration-layers
 '([...]
 mu4e
 [...])
 dotspacemacs-additional-packages '(mu4e-alert org-msg)

 (defun dotspacemacs/user-config ()
 [...]

 ;; Mu4e
 ;; https://emacs.stackexchange.com/questions/46156/how-to-install-mu-and-mu4e-with-gui-emacs
 (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e")
 (require 'mu4e)
 (setq mu4e-maildir "~/.Mail"
       mu4e-trash-folder "/Trash"
       mu4e-refile-folder "/Archive"
       mu4e-get-mail-command "offlineimap"
       mu4e-update-interval nil
       mu4e-compose-signature-auto-include nil
       mu4e-view-show-images t
       mu4e-view-show-addresses t)

 (setq mu4e-enable-mode-line t)
 (setq mu4e-enable-notifications t)

 ;; shortcuts
 (setq mu4e-maildir-shortcuts
       '(("/INBOX"               . ?i)))

 (require 'smtpmail)
 (setq message-send-mail-function 'smtpmail-send-it
       starttls-use-gnutls t
       smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
       smtpmail-auth-credentials
       '(("smtp.gmail.com" 587 "{your-email}@gmail.com" nil))
       smtpmail-default-smtp-server "smtp.gmail.com"
       smtpmail-smtp-server "smtp.gmail.com"
       smtpmail-smtp-service 587)

 ;; don't keep message buffers around
 (setq message-kill-buffer-on-exit t)
 (setq mu4e-sent-messages-behavior 'delete)

 (setq mu4e-show-images t)

 (when (fboundp 'imagemagick-register-types)
   (imagemagick-register-types))

 ;; convert html emails properly
 ;; Possible options:
 ;;   - html2text -utf8 -width 72
 ;;   - textutil -stdin -format html -convert txt -stdout
 ;;   - html2markdown | grep -v '&nbsp_place_holder;' (Requires html2text pypi)
 ;;   - w3m -dump -cols 80 -T text/html
 ;;   - view in browser (provided below)
 ;; (setq mu4e-html2text-command "textutil -stdin -format html -convert txt -stdout")
 (require 'mu4e-contrib)
 (setq mu4e-html2text-command 'mu4e-shr2text)
 (add-hook 'mu4e-view-mode-hook
           (lambda()
             (local-set-key (kbd "<tab>") 'shr-next-link)
             (local-set-key (kbd "<backtab>") 'shr-previous-link)))
 ;; (setq browse-url-browser-function 'eww-browse-url)

 (setq mu4e-update-interval 60)

 (setq
  user-mail-address "{your-email}@gmail.com"
  user-full-name  "{your-name}"
  mu4e-compose-signature "{your-signature}")

 (setq mail-user-agent 'mu4e-user-agent)
  [...])

Org-Msg Configuration

~/.spacemacs

(defun dotspacemacs/user-config ()
[...]
;; org-msg
(require 'org-msg)
(setq org-msg-options "html-postamble:nil H:5 num:nil ^:{} toc:nil"
      org-msg-startup "indent inlineimages"
      org-msg-greeting-fmt "\nHi *%s*,\n\n"
      org-msg-greeting-name-limit 3
      org-msg-signature "
      Regards,

   #+begin_signature
   -- *{your-name}* \\\\
   /Sent from my Emacs/
   #+end_signature")
 (org-msg-mode)
 [...])

It is possible to change the org-msg style via `org-msg-enforce-css`. The default style look like this:

Usage

To start mu4e from spacemacs: <space>aM

Some commands that I use a lot in header view:

m => move

d => delete

? => unread

! => read

Some commands that I use a lot in editor view:

aV => view in browser

C-c/C-c => send email

C-c C-k => kill email

C-c C-a => add attachment