diff -ur mailman-2.1.20.org/Mailman/Gui/General.py mailman-2.1.20/Mailman/Gui/General.py --- mailman-2.1.20.org/Mailman/Gui/General.py 2015-03-31 19:21:49.000000000 +0200 +++ mailman-2.1.20/Mailman/Gui/General.py 2016-02-21 10:25:57.685943034 +0100 @@ -505,6 +505,13 @@ here.""")) ) + # add X-IMAP-Folder header + rtn.append( + ('x_imap_folder', mm_cfg.String, WIDTH, 0, + _('''If filled add to each outgroing email X-IMAP-Folder header + with this value.''')) + ) + # Discard held messages after this number of days rtn.append( ('max_days_to_hold', mm_cfg.Number, 7, 0, diff -ur mailman-2.1.20.org/Mailman/Handlers/CookHeaders.py mailman-2.1.20/Mailman/Handlers/CookHeaders.py --- mailman-2.1.20.org/Mailman/Handlers/CookHeaders.py 2015-03-31 19:21:49.000000000 +0200 +++ mailman-2.1.20/Mailman/Handlers/CookHeaders.py 2016-02-21 10:25:57.685943034 +0100 @@ -107,6 +107,11 @@ # X-BeenThere's intact. change_header('X-BeenThere', mlist.GetListEmail(), mlist, msg, msgdata, delete=False) + + # X-IMAP-Folder header, used commonly for server side filtering to folders. + if mlist.x_imap_folder: + msg['X-IMAP-Folder'] = mlist.x_imap_folder + # Add Precedence: and other useful headers. None of these are standard # and finding information on some of them are fairly difficult. Some are # just common practice, and we'll add more here as they become necessary. diff -ur mailman-2.1.20.org/Mailman/MailList.py mailman-2.1.20/Mailman/MailList.py --- mailman-2.1.20.org/Mailman/MailList.py 2015-03-31 19:21:49.000000000 +0200 +++ mailman-2.1.20/Mailman/MailList.py 2016-02-21 10:25:57.685943034 +0100 @@ -367,6 +367,7 @@ self.available_languages = [] self.include_rfc2369_headers = 1 self.include_list_post_header = 1 + self.x_imap_folder = '' self.include_sender_header = 1 self.filter_mime_types = mm_cfg.DEFAULT_FILTER_MIME_TYPES self.pass_mime_types = mm_cfg.DEFAULT_PASS_MIME_TYPES diff -ur mailman-2.1.20.org/Mailman/versions.py mailman-2.1.20/Mailman/versions.py --- mailman-2.1.20.org/Mailman/versions.py 2015-03-31 19:21:49.000000000 +0200 +++ mailman-2.1.20/Mailman/versions.py 2016-02-21 10:26:55.443940355 +0100 @@ -168,6 +168,10 @@ else: return None + def add_only_if_missing(attr, initval, l=l): + if not hasattr(l, attr): + setattr(l, attr, initval) + # Migrate to 2.1b3, baw 17-Aug-2001 if hasattr(l, 'dont_respond_to_post_requests'): oldval = getattr(l, 'dont_respond_to_post_requests') @@ -414,6 +418,8 @@ PreferStored('author_is_list', 'from_is_list', mm_cfg.DEFAULT_FROM_IS_LIST) + add_only_if_missing('x_imap_folder', '') + def NewVars(l):