When refiling messages, perhaps to archive them, it can be useful to have different target folders for different messages, based on some property of those message — smart refiling.
To accomplish this, we can set the refiling folder (
to a function that returns the actual refiling folder for the particular
message. An example should clarify this:
(setq mu4e-refile-folder (lambda (msg) (cond ;; messages to the mu mailing list go to the /mu folder ((mu4e-message-contact-field-matches msg :to "email@example.com") "/mu") ;; messages sent directly to some spefic address me go to /private ((mu4e-message-contact-field-matches msg :to "firstname.lastname@example.org") "/private") ;; messages with football or soccer in the subject go to /football ((string-match "football\\|soccer" (mu4e-message-field msg :subject)) "/football") ;; messages sent by me go to the sent folder ((mu4e-message-sent-by-me msg (mu4e-personal-addresses)) mu4e-sent-folder) ;; everything else goes to /archive ;; important to have a catch-all at the end! (t "/archive"))))
This can be very powerful; you can select some messages in the headers view, then press r, and have them all marked for refiling to their particular folders.
mu4e-refile-folderto an anonymous (
lambda) function. This function takes one argument, a message plist27. The plist corresponds to the message at point. See Message functions for a discussion on how to deal with them.
condcontrol structure; the function returns the first of the clauses that matches. It’s important to make the last clause a catch-all, so we always return some folder.
mu4e-message-contact-field-matches, which evaluates to
tif any of the names or e-mail addresses in a contact field (in this case, the
To:-field) matches the regular expression. With
mu4eversion 0.9.16 or newer, the contact field can in fact be a list instead of a single value, such as
a property list describing a message