# Copyright (C) 2001-2009 by the Free Software Foundation, Inc. # # This file is part of GNU Mailman. # # GNU Mailman is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # GNU Mailman is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # GNU Mailman. If not, see . from __future__ import absolute_import, unicode_literals __metaclass__ = type __all__ = [ 'inject_message', 'inject_text', ] from email import message_from_string from email.utils import formatdate, make_msgid from mailman.config import config from mailman.email.message import Message def inject_message(mlist, msg, recips=None, switchboard=None): """Inject a message into a queue. :param mlist: The mailing list this message is destined for. :type mlist: IMailingList :param msg: The Message object to inject. :type msg: a Message object :param recips: Optional set of recipients to put into the message's metadata. :type recips: sequence of strings :param switchboard: Optional name of switchboard to inject this message into. If not given, the 'in' switchboard is used. :type switchboard: string """ if switchboard is None: switchboard = 'in' # Since we're crafting the message from whole cloth, let's make sure this # message has a Message-ID. if 'message-id' not in msg: msg['Message-ID'] = make_msgid() # Ditto for Date: as required by RFC 2822. if 'date' not in msg: msg['Date'] = formatdate(localtime=True) kws = dict( listname=mlist.fqdn_listname, tolist=True, original_size=getattr(msg, 'original_size', len(msg.as_string())), ) if recips is not None: kws['recips'] = recips config.switchboards[switchboard].enqueue(msg, **kws) def inject_text(mlist, text, recips=None, switchboard=None): """Inject a message into a queue. :param mlist: The mailing list this message is destined for. :type mlist: IMailingList :param text: The text of the message to inject. This will be parsed into a Message object. :type text: string :param recips: Optional set of recipients to put into the message's metadata. :type recips: sequence of strings :param switchboard: Optional name of switchboard to inject this message into. If not given, the 'in' switchboard is used. :type switchboard: string """ message = message_from_string(text, Message) message.original_size = len(text) inject_message(mlist, message, recips, switchboard)