class TestQueueProcessorThread(TestCase): def setUp(self): from zope.app.mail.delivery import QueueProcessorThread self.md = MaildirStub('/foo/bar/baz') self.thread = QueueProcessorThread() self.thread.setMaildir(self.md) self.mailer = MailerStub() self.thread.setMailer(self.mailer) self.thread.log = LoggerStub() def test_parseMessage(self): hdr = ('X-Zope-From: [email protected]\n' 'X-Zope-To: [email protected], [email protected]\n') msg = ('Header: value\n' '\n' 'Body\n') f, t, m = self.thread._parseMessage(hdr + msg) self.assertEquals(f, '*****@*****.**') self.assertEquals(t, ('*****@*****.**', '*****@*****.**')) self.assertEquals(m, msg) def test_deliveration(self): self.filename = mktemp() temp = open(self.filename, "w+b") temp.write('X-Zope-From: [email protected]\n' 'X-Zope-To: [email protected], [email protected]\n' 'Header: value\n\nBody\n') temp.close() self.md.files.append(self.filename) self.thread.run(forever=False) self.assertEquals(self.mailer.sent_messages, [('*****@*****.**', ('*****@*****.**', '*****@*****.**'), 'Header: value\n\nBody\n')]) self.failIf(os.path.exists(self.filename), 'File exists') self.assertEquals(self.thread.log.infos, [('Mail from %s to %s sent.', ('*****@*****.**', '[email protected], [email protected]'), {})]) def test_error_logging(self): self.thread.setMailer(BrokenMailerStub()) self.filename = mktemp() temp = open(self.filename, "w+b") temp.write('X-Zope-From: [email protected]\n' 'X-Zope-To: [email protected], [email protected]\n' 'Header: value\n\nBody\n') temp.close() self.md.files.append(self.filename) self.thread.run(forever=False) self.assertEquals(self.thread.log.errors, [('Error while sending mail from %s to %s.', ('*****@*****.**', '[email protected], [email protected]'), {'exc_info': 1})])
def createQueuedDelivery(): delivery = QueuedMailDelivery(queuePath) delivery = _assertPermission(permission, IMailDelivery, delivery) handler('provideUtility', IMailDelivery, delivery, name) mailerObject = zapi.queryUtility(IMailer, mailer) if mailerObject is None: raise ConfigurationError("Mailer %r is not defined" %mailer) thread = QueueProcessorThread() thread.setMailer(mailerObject) thread.setQueuePath(queuePath) thread.start()