X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fnnmail.el;h=f56495010c495764c14d25328aec4fe9f1ce88c4;hb=36bd162f4f7cd40453b8683e796730836c352b2a;hp=f9bdcc85fcc0d0cbf09e1762c10762f44c4e2a1c;hpb=a6ce7a6b7040b917517c56bcd532206acf818092;p=elisp%2Fgnus.git- diff --git a/lisp/nnmail.el b/lisp/nnmail.el index f9bdcc8..f564950 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -189,6 +189,39 @@ The return value should be `delete' or a group name (a string)." (function :format "%v" nnmail-) string)) +(defcustom nnmail-fancy-expiry-targets nil + "Determine expiry target based on articles using fancy techniques. + +This is a list of (\"HEADER\" \"REGEXP\" \"TARGET\") entries. If +`nnmail-expiry-target' is set to the function +`nnmail-fancy-expiry-target' and HEADER of the article matches REGEXP, +the message will be expired to a group determined by invoking +`format-time-string' with TARGET used as the format string and the +time extracted from the articles' Date header (if missing the current +time is used). + +In the special cases that HEADER is the symbol `to-from', the regexp +will try to match against both the From and the To header. + +Example: + +\(setq nnmail-fancy-expiry-targets + '((to-from \"boss\" \"nnfolder:Work\") + (\"Subject\" \"IMPORTANT\" \"nnfolder:IMPORTANT.%Y.%b\") + (\"from\" \".*\" \"nnfolder:Archive-%Y\"))) + +In this case, articles containing the string \"boss\" in the To or the +From header will be expired to the group \"nnfolder:Work\"; +articles containing the sting \"IMPORTANT\" in the Subject header will +be expired to the group \"nnfolder:IMPORTANT.YYYY.MMM\"; and +everything else will be expired to \"nnfolder:Archive-YYYY\"." + :group 'nnmail-expire + :type '(repeat (list (choice :tag "Match against" + (string :tag "Header") + (const to-from)) + regexp + (string :tag "Target group format string")))) + (defcustom nnmail-cache-accepted-message-ids nil "If non-nil, put Message-IDs of Gcc'd articles into the duplicate cache. If non-nil, also update the cache when copy or move articles." @@ -345,6 +378,12 @@ GROUP: Mail will be stored in GROUP (a string). return value FUNCTION should be a split, which is then recursively processed. +junk: Mail will be deleted. Use with care! Do not submerge in water! + Example: + (setq nnmail-split-fancy + '(| (\"Subject\" \"MAKE MONEY FAST\" junk) + ...other.rules.omitted...)) + FIELD must match a complete field name. VALUE must match a complete word according to the `nnmail-split-fancy-syntax-table' syntax table. You can use \".*\" in the regexps to match partial field names or words. @@ -478,7 +517,7 @@ parameter. It should return nil, `warn' or `delete'." nnheader-text-coding-system "Coding system used in reading inbox") -(defvar nnmail-pathname-coding-system 'binary +(defvar nnmail-pathname-coding-system nil "*Coding system for pathname.") (defun nnmail-find-file (file) @@ -1485,7 +1524,10 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (references nil) (res nil) (regexp (if (consp nnmail-split-fancy-with-parent-ignore-groups) - (mapconcat 'nnmail-split-fancy-with-parent-ignore-groups " *\\|") + (mapconcat + (lambda (x) (format "\\(%s\\)" x)) + nnmail-split-fancy-with-parent-ignore-groups + "\\|") nnmail-split-fancy-with-parent-ignore-groups))) (when refstr (setq references (nreverse (gnus-split-references refstr))) @@ -1494,7 +1536,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (mapcar (lambda (x) (setq res (or (nnmail-cache-fetch-group x) res)) (when (or (string= "drafts" res) - (and regexp (string-match regexp res))) + (and regexp res (string-match regexp res))) (setq res nil))) references) res))) @@ -1682,6 +1724,8 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (ignore-errors (time-less-p days (time-since time)))))))) (defun nnmail-expiry-target-group (target group) + ;; Do not invoke this from nntp-server-buffer! At least nnfolder clears + ;; that buffer if the nnfolder group isn't selected. (let (nnmail-cache-accepted-message-ids) ;; Don't enter Message-IDs into cache. ;; Let users hack it in TARGET function. @@ -1690,6 +1734,31 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (unless (eq target 'delete) (gnus-request-accept-article target nil nil t)))) +(defun nnmail-fancy-expiry-target (group) + "Returns a target expiry group determined by `nnmail-fancy-expiry-targets'." + (let* (header + (case-fold-search nil) + (from (or (message-fetch-field "from") "")) + (to (or (message-fetch-field "to") "")) + (date (date-to-time + (or (message-fetch-field "date") (current-time-string)))) + (target 'delete)) + (dolist (regexp-target-pair (reverse nnmail-fancy-expiry-targets) target) + (setq header (car regexp-target-pair)) + (cond + ;; If the header is to-from then match against the + ;; To or From header + ((and (equal header 'to-from) + (or (string-match (cadr regexp-target-pair) from) + (and (string-match message-dont-reply-to-names from) + (string-match (cadr regexp-target-pair) to)))) + (setq target (format-time-string (caddr regexp-target-pair) date))) + ((and (not (equal header 'to-from)) + (string-match (cadr regexp-target-pair) + (message-fetch-field header))) + (setq target + (format-time-string (caddr regexp-target-pair) date))))))) + (defun nnmail-check-syntax () "Check (and modify) the syntax of the message in the current buffer." (save-restriction