summaryrefslogtreecommitdiff
path: root/src/mailman/rules/docs/loop.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/rules/docs/loop.txt')
-rw-r--r--src/mailman/rules/docs/loop.txt48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/mailman/rules/docs/loop.txt b/src/mailman/rules/docs/loop.txt
new file mode 100644
index 000000000..61612cd75
--- /dev/null
+++ b/src/mailman/rules/docs/loop.txt
@@ -0,0 +1,48 @@
+Posting loops
+=============
+
+To avoid a posting loop, Mailman has a rule to check for the existence of an
+X-BeenThere header with the value of the list's posting address.
+
+ >>> mlist = config.db.list_manager.create(u'_xtest@example.com')
+ >>> rule = config.rules['loop']
+ >>> print rule.name
+ loop
+
+The header could be missing, in which case the rule does not match.
+
+ >>> msg = message_from_string("""\
+ ... From: aperson@example.com
+ ...
+ ... An important message.
+ ... """)
+ >>> rule.check(mlist, msg, {})
+ False
+
+The header could be present, but not match the list's posting address.
+
+ >>> msg['X-BeenThere'] = u'not-this-list@example.com'
+ >>> rule.check(mlist, msg, {})
+ False
+
+If the header is present and does match the posting address, the rule
+matches.
+
+ >>> del msg['x-beenthere']
+ >>> msg['X-BeenThere'] = mlist.posting_address
+ >>> rule.check(mlist, msg, {})
+ True
+
+Even if there are multiple X-BeenThere headers, as long as one with the
+posting address exists, the rule matches.
+
+ >>> msg = message_from_string("""\
+ ... From: aperson@example.com
+ ... X-BeenThere: not-this-list@example.com
+ ... X-BeenThere: _xtest@example.com
+ ... X-BeenThere: foo@example.com
+ ...
+ ... An important message.
+ ... """)
+ >>> rule.check(mlist, msg, {})
+ True