summaryrefslogtreecommitdiff
path: root/src/mailman/pipeline/docs/cleanse.txt
blob: 155de0673718c3c64c1ea7f6473d53c56b267846 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
=================
Cleansing headers
=================

All messages posted to a list get their headers cleansed.  Some headers are
related to additional permissions that can be granted to the message and other
headers can be used to fish for membership.

    >>> mlist = create_list('_xtest@example.com')

Headers such as Approved, Approve, and Urgent are used to grant special
pemissions to individual messages.  All may contain a password; the first two
headers are used by list administrators to pre-approve a message normal held
for approval.  The latter header is used to send a regular message to all
members, regardless of whether they get digests or not.  Because all three
headers contain passwords, they must be removed from any posted message.

    >>> msg = message_from_string("""\
    ... From: aperson@example.com
    ... Approved: foobar
    ... Approve: barfoo
    ... Urgent: notreally
    ... Subject: A message of great import
    ...
    ... Blah blah blah
    ... """)

    >>> handler = config.handlers['cleanse']
    >>> handler.process(mlist, msg, {})
    >>> print msg.as_string()
    From: aperson@example.com
    Subject: A message of great import
    <BLANKLINE>
    Blah blah blah
    <BLANKLINE>

Other headers can be used by list members to fish the list for membership, so
we don't let them go through.  These are a mix of standard headers and custom
headers supported by some mail readers.  For example, X-PMRC is supported by
Pegasus mail.  I don't remember what program uses X-Confirm-Reading-To though
(Some Microsoft product perhaps?).

    >>> msg = message_from_string("""\
    ... From: bperson@example.com
    ... Reply-To: bperson@example.org
    ... Sender: asystem@example.net
    ... Return-Receipt-To: another@example.com
    ... Disposition-Notification-To: athird@example.com
    ... X-Confirm-Reading-To: afourth@example.com
    ... X-PMRQC: afifth@example.com
    ... Subject: a message to you
    ...
    ... How are you doing?
    ... """)
    >>> handler.process(mlist, msg, {})
    >>> print msg.as_string()
    From: bperson@example.com
    Reply-To: bperson@example.org
    Sender: asystem@example.net
    Subject: a message to you
    <BLANKLINE>
    How are you doing?
    <BLANKLINE>


Anonymous lists
===============

Anonymous mailing lists also try to cleanse certain identifying headers from
the original posting, so that it is at least a bit more difficult to determine
who sent the message.  This isn't perfect though, for example, the body of the
messages are never scrubbed (though that might not be a bad idea).  The From
and Reply-To headers in the posted message are taken from list attributes.

Hotmail apparently sets X-Originating-Email.

    >>> mlist.anonymous_list = True
    >>> mlist.description = 'A Test Mailing List'
    >>> mlist.preferred_language = 'en'
    >>> msg = message_from_string("""\
    ... From: bperson@example.com
    ... Reply-To: bperson@example.org
    ... Sender: asystem@example.net
    ... X-Originating-Email: cperson@example.com
    ... Subject: a message to you
    ...
    ... How are you doing?
    ... """)
    >>> handler.process(mlist, msg, {})
    >>> print msg.as_string()
    Subject: a message to you
    From: A Test Mailing List <_xtest@example.com>
    Reply-To: _xtest@example.com
    <BLANKLINE>
    How are you doing?
    <BLANKLINE>