By setting mu4e-refile-folder
to a function, you can dynamically
determine where messages are to be refiled. If you want to do this based
on the subject of a message, you can use a function that matches the
subject against a list of regexes in the following way. First, set up a
variable my-mu4e-subject-alist
containing regexes plus associated
mail folders:
(defvar my-mu4e-subject-alist '(("kolloqui\\(um\\|a\\)" . "/Kolloquium") ("Calls" . "/Calls") ("Lehr" . "/Lehre") ("webseite\\|homepage\\|website" . "/Webseite")) "List of subjects and their respective refile folders.")
Now you can use the following function to automatically refile messages based on their subject line:
(defun my-mu4e-refile-folder-function (msg) "Set the refile folder for MSG." (let ((subject (mu4e-message-field msg :subject)) (folder (or (cdar (member* subject my-mu4e-subject-alist :test #'(lambda (x y) (string-match (car y) x)))) "/General"))) folder))
Note the "/General"
folder: it is the default folder in case the
subject does not match any of the regexes in
my-mu4e-subject-alist
.
In order to make this work, you’ll of course need to set
mu4e-refile-folder
to this function:
(setq mu4e-refile-folder 'my-mu4e-refile-folder-function)
If you have multiple accounts, you can accommodate them as well:
(defun my-mu4e-refile-folder-function (msg) "Set the refile folder for MSG." (let ((maildir (mu4e-message-field msg :maildir)) (subject (mu4e-message-field msg :subject)) folder) (cond ((string-match "Account1" maildir) (setq folder (or (catch 'found (dolist (mailing-list my-mu4e-mailing-lists) (if (mu4e-message-contact-field-matches msg :to (car mailing-list)) (throw 'found (cdr mailing-list))))) "/Account1/General"))) ((string-match "Gmail" maildir) (setq folder "/Gmail/All Mail")) ((string-match "Account2" maildir) (setq folder (or (cdar (member* subject my-mu4e-subject-alist :test #'(lambda (x y) (string-match (car y) x)))) "/Account2/General")))) folder))
This function actually uses different methods to determine the refile
folder, depending on the account: for Account2, it uses
my-mu4e-subject-alist
, for the Gmail account it simply uses the
folder “All Mail”. For Account1, it uses another method: it files the
message based on the mailing list to which it was sent. This requires
another variable:
(defvar my-mu4e-mailing-lists '(("mu-discuss@googlegroups.com" . "/Account1/mu4e") ("pandoc-discuss@googlegroups.com" . "/Account1/Pandoc") ("auctex@gnu.org" . "/Account1/AUCTeX")) "List of mailing list addresses and folders where their messages are saved.")