============================== Command line message injection ============================== You can inject a message directly into a queue directory via the command line. :: >>> from mailman.commands.cli_inject import Inject >>> command = Inject() >>> class FakeArgs: ... queue = None ... show = False ... filename = None ... listname = None >>> args = FakeArgs() >>> class FakeParser: ... def error(self, message): ... print message >>> command.parser = FakeParser() It's easy to find out which queues are available. :: >>> args.show = True >>> command.process(args) Available queues: archive bad bounces command digest in lmtp maildir news out pipeline rest retry shunt virgin >>> args.show = False Usually, the text of the message to inject is in a file. >>> import os, tempfile >>> fd, filename = tempfile.mkstemp() >>> with os.fdopen(fd, 'w') as fp: ... print >> fp, """\ ... From: aperson@example.com ... To: test@example.com ... Subject: testing ... ... This is a test message. ... """ However, the mailing list name is always required. >>> args.filename = filename >>> command.process(args) List name is required Let's provide a list name and try again. :: >>> mlist = create_list('test@example.com') >>> transaction.commit() >>> in_queue = config.switchboards['in'] >>> len(in_queue.files) 0 >>> args.listname = ['test@example.com'] >>> command.process(args) By default, the incoming queue is used. :: >>> len(in_queue.files) 1 >>> from mailman.testing.helpers import get_queue_messages >>> item = get_queue_messages('in')[0] >>> print item.msg.as_string() From: aperson@example.com To: test@example.com Subject: testing Message-ID: ... Date: ... This is a test message. >>> dump_msgdata(item.msgdata) _parsemsg : False listname : test@example.com original_size: 90 version : 3 But a different queue can be specified on the command line. :: >>> args.queue = 'virgin' >>> command.process(args) >>> len(in_queue.files) 0 >>> virgin_queue = config.switchboards['virgin'] >>> len(virgin_queue.files) 1 >>> item = get_queue_messages('virgin')[0] >>> print item.msg.as_string() From: aperson@example.com To: test@example.com Subject: testing Message-ID: ... Date: ... This is a test message. >>> dump_msgdata(item.msgdata) _parsemsg : False listname : test@example.com original_size: 90 version : 3 # Clean up the tempfile. >>> os.remove(filename) Standard input ============== The message text can also be provided on standard input. :: >>> from StringIO import StringIO # Remember: we've got unicode literals turned on. >>> standard_in = StringIO(str("""\ ... From: bperson@example.com ... To: test@example.com ... Subject: another test ... ... This is another test message. ... """)) >>> import sys >>> sys.stdin = standard_in >>> args.filename = '-' >>> args.queue = None >>> command.process(args) >>> len(in_queue.files) 1 >>> item = get_queue_messages('in')[0] >>> print item.msg.as_string() From: bperson@example.com To: test@example.com Subject: another test Message-ID: ... Date: ... This is another test message. >>> dump_msgdata(item.msgdata) _parsemsg : False listname : test@example.com original_size: 100 version : 3 # Clean up. >>> sys.stdin = sys.__stdin__ >>> args.filename = filename Errors ====== It is an error to specify a queue that doesn't exist. >>> args.queue = 'xxbogusxx' >>> command.process(args) No such queue: xxbogusxx It is also an error to specify a mailing list that doesn't exist. >>> args.queue = None >>> args.listname = ['bogus'] >>> command.process(args) No such list: bogus