~barry/mailman/events-and-web

« back to all changes in this revision

Viewing changes to src/mailman/model/docs/autorespond.rst

  • Committer: klm
  • Date: 1998-01-07 21:21:35 UTC
  • Revision ID: vcs-imports@canonical.com-19980107212135-sv0y521ps0xye37r
Initial revision

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
===================
2
 
Automatic responder
3
 
===================
4
 
 
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.
9
 
 
10
 
First, given a mailing list you need to adapt it to an ``IAutoResponseSet``.
11
 
::
12
 
 
13
 
    >>> mlist = create_list('test@example.com')
14
 
    >>> from mailman.interfaces.autorespond import IAutoResponseSet
15
 
    >>> response_set = IAutoResponseSet(mlist)
16
 
 
17
 
    >>> from zope.interface.verify import verifyObject
18
 
    >>> verifyObject(IAutoResponseSet, response_set)
19
 
    True
20
 
 
21
 
You can't adapt other objects to an ``IAutoResponseSet``.
22
 
 
23
 
    >>> IAutoResponseSet(object())
24
 
    Traceback (most recent call last):
25
 
    ...
26
 
    TypeError: ('Could not adapt', ...
27
 
 
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.
32
 
::
33
 
 
34
 
    >>> from mailman.interfaces.usermanager import IUserManager
35
 
    >>> from zope.component import getUtility
36
 
    >>> address = getUtility(IUserManager).create_address(
37
 
    ...     'aperson@example.com')
38
 
 
39
 
    >>> from mailman.interfaces.autorespond import Response
40
 
    >>> response_set.todays_count(address, Response.hold)
41
 
    0
42
 
    >>> response_set.todays_count(address, Response.command)
43
 
    0
44
 
 
45
 
Using the response set, we can record that a hold response is sent to the
46
 
address.
47
 
 
48
 
    >>> response_set.response_sent(address, Response.hold)
49
 
    >>> response_set.todays_count(address, Response.hold)
50
 
    1
51
 
    >>> response_set.todays_count(address, Response.command)
52
 
    0
53
 
 
54
 
We can also record that a command response was sent.
55
 
 
56
 
    >>> response_set.response_sent(address, Response.command)
57
 
    >>> response_set.todays_count(address, Response.hold)
58
 
    1
59
 
    >>> response_set.todays_count(address, Response.command)
60
 
    1
61
 
 
62
 
Let's send one more.
63
 
 
64
 
    >>> response_set.response_sent(address, Response.command)
65
 
    >>> response_set.todays_count(address, Response.hold)
66
 
    1
67
 
    >>> response_set.todays_count(address, Response.command)
68
 
    2
69
 
 
70
 
Now the day flips over and all the counts reset.
71
 
::
72
 
 
73
 
    >>> from mailman.utilities.datetime import factory
74
 
    >>> factory.fast_forward()
75
 
 
76
 
    >>> response_set.todays_count(address, Response.hold)
77
 
    0
78
 
    >>> response_set.todays_count(address, Response.command)
79
 
    0
80
 
 
81
 
 
82
 
Response dates
83
 
==============
84
 
 
85
 
You can also use the response set to get the date of the last response sent.
86
 
 
87
 
    >>> response = response_set.last_response(address, Response.hold)
88
 
    >>> response.mailing_list
89
 
    <mailing list "test@example.com" at ...>
90
 
    >>> response.address
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)
96
 
 
97
 
When another response is sent today, that becomes the last one sent.
98
 
::
99
 
 
100
 
    >>> response_set.response_sent(address, Response.command)
101
 
    >>> response_set.last_response(address, Response.command).date_sent
102
 
    datetime.date(2005, 8, 2)
103
 
 
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)
108
 
 
109
 
If there's been no response sent to a particular address, None is returned.
110
 
 
111
 
    >>> address = getUtility(IUserManager).create_address(
112
 
    ...     'bperson@example.com')
113
 
    >>> response_set.todays_count(address, Response.command)
114
 
    0
115
 
    >>> print response_set.last_response(address, Response.command)
116
 
    None