If you ever watched me register on a website, you might have noticed that I always pick the sites top level domain as the local part of my email. So, on
example.com, I would register as
firstname.lastname@example.org - that way I can make sure I have proper filters in place and in case there is spam delivered to any of those addresses, I have reasonable suspicion who dropped the ball. (Also
gopass can defer the user name if I just abide by my own conventions).
To keep things tidy, I also want to also reply from
email@example.com and this is where it gets interesting:
Sadly not all email clients (and by that, I mean almost none) are able to send emails from a varying address. I remember Thunderbird let me edit the
From field in the olden days, but I don't know if it is still able to.
Since I use mu4e for all my email needs – with a smidgen of Emacs Lisp - it can be taught to pick the correct sender when replying.
First, let's define a function that will process the mu4e message (
(defun bascht/mu4e-change-from-to-catchall (msg) "Set the From address based on the To address of the original message if I reply." (setq user-mail-address (if (and msg (mu4e-message-contact-field-matches msg :to "bascht.com")) (plist-get (car-safe (mu4e-message-field msg :to)) :email) (cdr-safe (assoc 'user-mail-address (mu4e-context-vars (mu4e-context-current)))))))
To set the
From address, I found no other way than to directly modify
user-email=address, so in case the domain of
bascht.com, I will just use it as my sender address. In any other case, I want mu4e just to fall back to the default address of the current context.
⚠️ That last bit is important. Otherwise mu4e will stick to the
user-email-address and you will compose new emails with the wrong sender.
Let's hook into
(add-hook! 'mu4e-compose-pre-hook (bascht/mu4e-change-from-to-catchall mu4e-compose-parent-message) ;; ← our function is called here. (spell-fu-mode) ;; parent message is the "original" (bascht/switch-spellcheck "de_DE") ;; message we reply to (evil-insert-state))
I left the rest of the hook in place in case you want to copy or adapt it, but it's not strictly needed.
The rest of the body will:
spell-fu-mode. I don't have a global spell mode enabled since it tends to get annyoing and slows down most editors. I rather opt-in.
I switch to
de_DEper default, as most of my emails are composed in German.
I directly switch to
(evil-insert-state)since I want to start typing. 😁
And that's it. Upon composing a reply to a message, Emacs will now pick the correct address for
— (Many thanks to everyone who replied to my Question on Mastodon!)