5
In various situations, Mailman will send an automatic response to the author
6
of an email message. For example, if someone sends a command to the
7
``-request`` address, Mailman will send a response, but to cut down on third
8
party spam, the sender will only get a certain number of responses per day.
10
First, given a mailing list you need to adapt it to an ``IAutoResponseSet``.
13
>>> mlist = create_list('test@example.com')
14
>>> from mailman.interfaces.autorespond import IAutoResponseSet
15
>>> response_set = IAutoResponseSet(mlist)
17
>>> from zope.interface.verify import verifyObject
18
>>> verifyObject(IAutoResponseSet, response_set)
21
You can't adapt other objects to an ``IAutoResponseSet``.
23
>>> IAutoResponseSet(object())
24
Traceback (most recent call last):
26
TypeError: ('Could not adapt', ...
28
There are various kinds of response types. For example, Mailman will send an
29
automatic response when messages are held for approval, or when it receives an
30
email command. You can find out how many responses for a particular address
31
have already been sent today.
34
>>> from mailman.interfaces.usermanager import IUserManager
35
>>> from zope.component import getUtility
36
>>> address = getUtility(IUserManager).create_address(
37
... 'aperson@example.com')
39
>>> from mailman.interfaces.autorespond import Response
40
>>> response_set.todays_count(address, Response.hold)
42
>>> response_set.todays_count(address, Response.command)
45
Using the response set, we can record that a hold response is sent to the
48
>>> response_set.response_sent(address, Response.hold)
49
>>> response_set.todays_count(address, Response.hold)
51
>>> response_set.todays_count(address, Response.command)
54
We can also record that a command response was sent.
56
>>> response_set.response_sent(address, Response.command)
57
>>> response_set.todays_count(address, Response.hold)
59
>>> response_set.todays_count(address, Response.command)
64
>>> response_set.response_sent(address, Response.command)
65
>>> response_set.todays_count(address, Response.hold)
67
>>> response_set.todays_count(address, Response.command)
70
Now the day flips over and all the counts reset.
73
>>> from mailman.utilities.datetime import factory
74
>>> factory.fast_forward()
76
>>> response_set.todays_count(address, Response.hold)
78
>>> response_set.todays_count(address, Response.command)
85
You can also use the response set to get the date of the last response sent.
87
>>> response = response_set.last_response(address, Response.hold)
88
>>> response.mailing_list
89
<mailing list "test@example.com" at ...>
91
<Address: aperson@example.com [not verified] at ...>
92
>>> response.response_type
93
<EnumValue: Response.hold [int=1]>
94
>>> response.date_sent
95
datetime.date(2005, 8, 1)
97
When another response is sent today, that becomes the last one sent.
100
>>> response_set.response_sent(address, Response.command)
101
>>> response_set.last_response(address, Response.command).date_sent
102
datetime.date(2005, 8, 2)
104
>>> factory.fast_forward(days=3)
105
>>> response_set.response_sent(address, Response.command)
106
>>> response_set.last_response(address, Response.command).date_sent
107
datetime.date(2005, 8, 5)
109
If there's been no response sent to a particular address, None is returned.
111
>>> address = getUtility(IUserManager).create_address(
112
... 'bperson@example.com')
113
>>> response_set.todays_count(address, Response.command)
115
>>> print response_set.last_response(address, Response.command)