def notifyFailure(self, relay, message): """ Generate a bounce message for a message which cannot be relayed. @type relay: L{SMTPManagedRelayerFactory} @param relay: The factory for the relayer responsible for the message. @type message: L{bytes} @param message: The path of the file holding the message. """ if self.noisy: log.msg("could not relay " + message) # Moshe - Bounce E-mail here # Be careful: if it's a bounced bounce, silently # discard it message = os.path.basename(message) with self.manager.queue.getEnvelopeFile(message) as fp: from_, to = pickle.load(fp) from_, to, bounceMessage = bounce.generateBounce( open(self.manager.queue.getPath(message) + "-D"), from_, to) fp, outgoingMessage = self.manager.queue.createNewMessage() with fp: pickle.dump([from_, to], fp) for line in bounceMessage.splitlines(): outgoingMessage.lineReceived(line) outgoingMessage.eomReceived() self._finish(relay, self.manager.queue.getPath(message))
def test_bounceMessageCustomTranscript(self): """ Pass a custom transcript message to L{twisted.mail.bounce.generateBounce}. """ fromAddress, to, s = bounce.generateBounce( BytesIO(b"""\ From: Moshe Zadka <*****@*****.**> To: [email protected] Subject: test """), b"*****@*****.**", b"*****@*****.**", "Custom transcript", ) self.assertEqual(fromAddress, b"") self.assertEqual(to, b"*****@*****.**") emailParser = email.parser.Parser() mess = emailParser.parse(StringIO(s.decode("utf-8"))) self.assertEqual(mess["To"], "*****@*****.**") self.assertEqual(mess["From"], "*****@*****.**") self.assertEqual(mess["subject"], "Returned Mail: see transcript for details") self.assertTrue(mess.is_multipart()) parts = mess.get_payload() self.assertEqual(parts[0].get_payload(), "Custom transcript\n")
def notifyFailure(self, relay, message): """ Generate a bounce message for a message which cannot be relayed. @type relay: L{SMTPManagedRelayerFactory} @param relay: The factory for the relayer responsible for the message. @type message: L{bytes} @param message: The path of the file holding the message. """ if self.noisy: log.msg("could not relay " + message) # Moshe - Bounce E-mail here # Be careful: if it's a bounced bounce, silently # discard it message = os.path.basename(message) with self.manager.queue.getEnvelopeFile(message) as fp: from_, to = pickle.load(fp) from_, to, bounceMessage = bounce.generateBounce( open(self.manager.queue.getPath(message) + '-D'), from_, to) fp, outgoingMessage = self.manager.queue.createNewMessage() with fp: pickle.dump([from_, to], fp) for line in bounceMessage.splitlines(): outgoingMessage.lineReceived(line) outgoingMessage.eomReceived() self._finish(relay, self.manager.queue.getPath(message))
def testBounceFormat(self): from_, to, s = bounce.generateBounce(cStringIO.StringIO('''\ From: Moshe Zadka <*****@*****.**> To: [email protected] Subject: test '''), '*****@*****.**', '*****@*****.**') self.assertEqual(from_, '') self.assertEqual(to, '*****@*****.**') mess = rfc822.Message(cStringIO.StringIO(s)) self.assertEqual(mess['To'], '*****@*****.**') self.assertEqual(mess['From'], '*****@*****.**') self.assertEqual(mess['subject'], 'Returned Mail: see transcript for details')
def testBounceFormat(self): from_, to, s = bounce.generateBounce(cStringIO.StringIO('''\ From: Moshe Zadka <*****@*****.**> To: [email protected] Subject: test '''), '*****@*****.**', '*****@*****.**') self.assertEquals(from_, '') self.assertEquals(to, '*****@*****.**') mess = rfc822.Message(cStringIO.StringIO(s)) self.assertEquals(mess['To'], '*****@*****.**') self.assertEquals(mess['From'], '*****@*****.**') self.assertEquals(mess['subject'], 'Returned Mail: see transcript for details')
def notifyFailure(self, relay, message): """Relaying the message has failed.""" log.msg("could not relay "+message) # Moshe - Bounce E-mail here # Be careful: if it's a bounced bounce, silently # discard it message = os.path.basename(message) fp = self.queue.getEnvelopeFile(message) from_, to = pickle.load(fp) fp.close() from_, to, bounceMessage = bounce.generateBounce(open(self.queue.getPath(message)+'-D'), from_, to) fp, outgoingMessage = self.queue.createNewMessage() pickle.dump([from_, to], fp) fp.close() for line in string.split(bounceMessage, '\n')[:-1]: outgoingMessage.lineReceived(line) outgoingMessage.eomReceived() self._finish(relay, self.queue.getPath(message))
def notifyFailure(self, relay, message): """Relaying the message has failed.""" if self.manager.queue.noisy: log.msg("could not relay "+message) # Moshe - Bounce E-mail here # Be careful: if it's a bounced bounce, silently # discard it message = os.path.basename(message) fp = self.manager.queue.getEnvelopeFile(message) from_, to = pickle.load(fp) fp.close() from_, to, bounceMessage = bounce.generateBounce(open(self.manager.queue.getPath(message)+'-D'), from_, to) fp, outgoingMessage = self.manager.queue.createNewMessage() pickle.dump([from_, to], fp) fp.close() for line in bounceMessage.splitlines(): outgoingMessage.lineReceived(line) outgoingMessage.eomReceived() self._finish(relay, self.manager.queue.getPath(message))
def _bounceBigMessage(self, header, message, ioType): """ Pass a really big message to L{twisted.mail.bounce.generateBounce}. """ fromAddress, to, s = bounce.generateBounce(ioType(header + message), "*****@*****.**", "*****@*****.**") emailParser = email.parser.Parser() mess = emailParser.parse(StringIO(s.decode("utf-8"))) self.assertEqual(mess["To"], "*****@*****.**") self.assertEqual(mess["From"], "*****@*****.**") self.assertEqual(mess["subject"], "Returned Mail: see transcript for details") self.assertTrue(mess.is_multipart()) parts = mess.get_payload() innerMessage = parts[1].get_payload() if isinstance(message, bytes): message = message.decode("utf-8") self.assertEqual(innerMessage[0].get_payload() + "\n", message)
def test_bounceMessageBytes(self): """ L{twisted.mail.bounce.generateBounce} can accept L{bytes}. """ fromAddress, to, s = bounce.generateBounce( BytesIO(b'''\ From: Moshe Zadka <*****@*****.**> To: [email protected] Subject: test '''), b'*****@*****.**', b'*****@*****.**') self.assertEqual(fromAddress, b'') self.assertEqual(to, b'*****@*****.**') emailParser = email.parser.Parser() mess = emailParser.parse(StringIO(s.decode("utf-8"))) self.assertEqual(mess['To'], '*****@*****.**') self.assertEqual(mess['From'], '*****@*****.**') self.assertEqual(mess['subject'], 'Returned Mail: see transcript for details')
def testBounceFormat(self): from_, to, s = bounce.generateBounce( cStringIO.StringIO( """\ From: Moshe Zadka <*****@*****.**> To: [email protected] Subject: test """ ), "*****@*****.**", "*****@*****.**", ) self.assertEqual(from_, "") self.assertEqual(to, "*****@*****.**") mess = rfc822.Message(cStringIO.StringIO(s)) self.assertEqual(mess["To"], "*****@*****.**") self.assertEqual(mess["From"], "*****@*****.**") self.assertEqual(mess["subject"], "Returned Mail: see transcript for details")
def test_bounceMessageBytes(self): """ L{twisted.mail.bounce.generateBounce} can accept L{bytes}. """ fromAddress, to, s = bounce.generateBounce( BytesIO(b"""\ From: Moshe Zadka <*****@*****.**> To: [email protected] Subject: test """), b"*****@*****.**", b"*****@*****.**", ) self.assertEqual(fromAddress, b"") self.assertEqual(to, b"*****@*****.**") emailParser = email.parser.Parser() mess = emailParser.parse(StringIO(s.decode("utf-8"))) self.assertEqual(mess["To"], "*****@*****.**") self.assertEqual(mess["From"], "*****@*****.**") self.assertEqual(mess["subject"], "Returned Mail: see transcript for details")
def test_bounceMessageCustomTranscript(self): """ Pass a custom transcript message to L{twisted.mail.bounce.generateBounce}. """ fromAddress, to, s = bounce.generateBounce( BytesIO(b'''\ From: Moshe Zadka <*****@*****.**> To: [email protected] Subject: test '''), b'*****@*****.**', b'*****@*****.**', 'Custom transcript') self.assertEqual(fromAddress, b'') self.assertEqual(to, b'*****@*****.**') emailParser = email.parser.Parser() mess = emailParser.parse(StringIO(s.decode("utf-8"))) self.assertEqual(mess['To'], '*****@*****.**') self.assertEqual(mess['From'], '*****@*****.**') self.assertEqual(mess['subject'], 'Returned Mail: see transcript for details') self.assertTrue(mess.is_multipart()) parts = mess.get_payload() self.assertEqual(parts[0].get_payload(), 'Custom transcript\n')