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
97
98
99
100
|
Calculating recipients
======================
Every message that makes it through to the list membership gets sent to a set
of recipient addresses. These addresses are calculated by one of the handler
modules and depends on a host of factors.
>>> handler = config.handlers['calculate-recipients']
>>> mlist = config.db.list_manager.create(u'_xtest@example.com')
Recipients are calculate from the list members, so add a bunch of members to
start out with. First, create a bunch of addresses...
>>> usermgr = config.db.user_manager
>>> address_a = usermgr.create_address(u'aperson@example.com')
>>> address_b = usermgr.create_address(u'bperson@example.com')
>>> address_c = usermgr.create_address(u'cperson@example.com')
>>> address_d = usermgr.create_address(u'dperson@example.com')
>>> address_e = usermgr.create_address(u'eperson@example.com')
>>> address_f = usermgr.create_address(u'fperson@example.com')
...then subscribe these addresses to the mailing list as members...
>>> from mailman.interfaces.member import MemberRole
>>> member_a = address_a.subscribe(mlist, MemberRole.member)
>>> member_b = address_b.subscribe(mlist, MemberRole.member)
>>> member_c = address_c.subscribe(mlist, MemberRole.member)
>>> member_d = address_d.subscribe(mlist, MemberRole.member)
>>> member_e = address_e.subscribe(mlist, MemberRole.member)
>>> member_f = address_f.subscribe(mlist, MemberRole.member)
...then make some of the members digest members.
>>> from mailman.constants import DeliveryMode
>>> member_d.preferences.delivery_mode = DeliveryMode.plaintext_digests
>>> member_e.preferences.delivery_mode = DeliveryMode.mime_digests
>>> member_f.preferences.delivery_mode = DeliveryMode.summary_digests
Short-circuiting
----------------
Sometimes, the list of recipients already exists in the message metadata.
This can happen for example, when a message was previously delivered to some
but not all of the recipients.
>>> msg = message_from_string("""\
... From: Xavier Person <xperson@example.com>
...
... Something of great import.
... """)
>>> recips = set((u'qperson@example.com', u'zperson@example.com'))
>>> msgdata = dict(recips=recips)
>>> handler.process(mlist, msg, msgdata)
>>> sorted(msgdata['recips'])
[u'qperson@example.com', u'zperson@example.com']
Regular delivery recipients
---------------------------
Regular delivery recipients are those people who get messages from the list as
soon as they are posted. In other words, these folks are not digest members.
>>> msgdata = {}
>>> handler.process(mlist, msg, msgdata)
>>> sorted(msgdata['recips'])
[u'aperson@example.com', u'bperson@example.com', u'cperson@example.com']
Members can elect not to receive a list copy of their own postings.
>>> member_c.preferences.receive_own_postings = False
>>> msg = message_from_string("""\
... From: Claire Person <cperson@example.com>
...
... Something of great import.
... """)
>>> msgdata = {}
>>> handler.process(mlist, msg, msgdata)
>>> sorted(msgdata['recips'])
[u'aperson@example.com', u'bperson@example.com']
Members can also elect not to receive a list copy of any message on which they
are explicitly named as a recipient. However, see the AvoidDuplicates handler
for details.
Digest recipients
-----------------
XXX Test various digest deliveries.
Urgent messages
---------------
XXX Test various urgent deliveries:
* test_urgent_moderator()
* test_urgent_admin()
* test_urgent_reject()
|