John Kitchin has a terrific post detailing some configuration/improvements to mu4e that make it easier to send html mail. This original post is really great, but I ran into quite a bit of trouble following this advice.

He uses a cool feature of mu4e, org-mu4e-compose-org-mode , which toggles the major mode of the message buffer between org-mode (when you’re in the message body) and mu4e-compose-mode (when you’re in the headers area). With a couple of custom functions, it’s easy to convert the org text to html and send a mime-multipart email from Emacs, which is quite convenient. If you add org-mu4e-compose-org-mode as a hook to mu4e-compose-mode , you can compose in html by default, which is great.

Unfortunately, org-mu4e-compose-org-mode is deprecated on account of its instability, and while John doesn’t have any problems with it, for me it was unworkable. It turns out that this “mode” isn’t really a standard emacs mode at all – instead, it’s a sly workaround that trickily adds an internal function to the ’post-command-hook in the draft buffer and switches major modes based on position. This is a neat hack, but since the function invokes the major modes directly, setting thefunction as a hook to mu4e-compose-mode leads to some funky, inadvertent looping effects. On my machine, for some reason, those effects send the underlying message-send function crazy, and instead of sending directly, I get this amazingly annoying question:

Already sent message via mail; resend? (y or n) y

On its own, that is already annoying; but worse, the sent message doesn’t get saved to my Sent folder. Instead, it’s lost completely.

Anyway, after fruitless hours of paying around with this, I realized that the problem could be fixed by adding a new hook to the mu4e compose functions (rather than to the compose mode). I’ve submitted those changes as a pull request and hopefully they will be accepted; if not, though, feel free to navigate back to my branch and pull/install mu from there. With those small changes, I now have frictionless html email working very quickly within emacs, using this small bit of code. It is at least 90% stolen:

;; this is stolen from John but it didn't work for me until I ;; made those changes to mu4e-compose.el ( defun htmlize-and-send () "When in an org-mu4e-compose-org-mode message, htmlize and send it." ( interactive ) ( when ( member 'org~mu4e-mime-switch-headers-or-body post-command-hook ) ( org-mime-htmlize ) ( org-mu4e-compose-org-mode ) ( mu4e-compose-mode ) ( message-send-and-exit ))) ;; This overloads the amazing C-c C-c commands in org-mode with one more function ;; namely the htmlize-and-send, above. ( add-hook 'org-ctrl-c-ctrl-c-hook 'htmlize-and-send t ) ;; Originally, I set the ` mu4e-compose-mode-hook ' here, but ;; this new hook works much, much better for me. ( add-hook 'mu4e-compose-post-hook ( defun do-compose-stuff () "My settings for message composition." ( org-mu4e-compose-org-mode )))

It feels great to have gotten this far. There are still some small things I’d like to be able to improve; and I think I would like to add a few wrapper functions and keybindings to my setup, but for now I’m pretty efficient.

Still missing:

a better HTML viewing interface! right now, html mails render as mostly text – it would be nice to have a rendered html message by default in emacs. This is an issue several times a day when I get promotional emails from organizations I work with – usually the html part is really important. I can access these in the browser but it’s comparatively awkward.

a way to forward these html emails to someone intact – right now, the html parts are discarded. No idea how hard it would be to do this.

Thanks John and Dirk-Jan for these great tools!