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
101
102
103
104
105
106
|
The command queue runner
========================
This queue runner's purpose is to process and respond to email commands.
Commands are extensible using the Mailman plugin system, but Mailman comes
with a number of email commands out of the box. These are processed when a
message is sent to the list's -request address.
>>> from mailman.app.lifecycle import create_list
>>> mlist = create_list(u'test@example.com')
A command in the Subject
------------------------
For example, the 'echo' command simply echoes the original command back to the
sender. The command can be in the Subject header.
>>> msg = message_from_string("""\
... From: aperson@example.com
... To: test-request@example.com
... Subject: echo hello
... Message-ID: <aardvark>
...
... """)
>>> from mailman.configuration import config
>>> from mailman.inject import inject_message
>>> inject_message(mlist, msg, qdir=config.CMDQUEUE_DIR)
>>> from mailman.queue.command import CommandRunner
>>> from mailman.tests.helpers import make_testable_runner
>>> command = make_testable_runner(CommandRunner)
>>> command.run()
And now the response is in the virgin queue.
>>> from mailman.queue import Switchboard
>>> virgin_queue = Switchboard(config.VIRGINQUEUE_DIR)
>>> len(virgin_queue.files)
1
>>> from mailman.tests.helpers import get_queue_messages
>>> item = get_queue_messages(virgin_queue)[0]
>>> print item.msg.as_string()
Subject: The results of your email commands
From: test-bounces@example.com
To: aperson@example.com
...
<BLANKLINE>
The results of your email command are provided below.
<BLANKLINE>
- Original message details:
From: aperson@example.com
Subject: echo hello
Date: ...
Message-ID: <aardvark>
<BLANKLINE>
- Results:
echo hello
<BLANKLINE>
- Done.
<BLANKLINE>
>>> sorted(item.msgdata.items())
[..., ('listname', u'test@example.com'), ...,
('recips', [u'aperson@example.com']),
...]
A command in the body
---------------------
The command can also be found in the body of the message, as long as the
message is plain text.
>>> msg = message_from_string("""\
... From: bperson@example.com
... To: test-request@example.com
... Message-ID: <bobcat>
...
... echo foo bar
... """)
>>> inject_message(mlist, msg, qdir=config.CMDQUEUE_DIR)
>>> command.run()
>>> len(virgin_queue.files)
1
>>> item = get_queue_messages(virgin_queue)[0]
>>> print item.msg.as_string()
Subject: The results of your email commands
From: test-bounces@example.com
To: bperson@example.com
...
Precedence: bulk
<BLANKLINE>
The results of your email command are provided below.
<BLANKLINE>
- Original message details:
From: bperson@example.com
Subject: n/a
Date: ...
Message-ID: <bobcat>
<BLANKLINE>
- Results:
echo foo bar
<BLANKLINE>
- Done.
<BLANKLINE>
|