Esempio n. 1
0
        def run(self, params, **options):
            ''' read stdin and save it to `emailqueue.models.Message`
            '''

            if sys.stdin.isatty():
                #: no stdin
                log.warn('no stdin')
                return

            print ">>>>", params
            save_inbound(
                params.service[0],
                params.sender[0],
                params.recipient[0],
                params.original_recipient[0],
                ''.join(sys.stdin.read()),          # raw_message
            )
Esempio n. 2
0
    def test_forward(self):
        models.Message.objects.all().delete()
        models.Relay.objects.all().delete()

        server_src = models.Server.objects.create(
            name='src',
            domain='src.deb',)

        server_dst = models.Server.objects.create(
            name='dst',
            domain='dst.deb',)

        sender = self.server.postbox_set.create(
            address='man@' + server_src.domain,
            forward=models.MailAddress.objects.create(
                email='man@' + server_src.domain))

        recipient = self.server.postbox_set.create(
            address='man@' + self.server.domain,
            forward=models.MailAddress.objects.create(
                email='man@' + server_dst.domain))

        mail = models.Mail.objects.create(
            sender=sender,
            name='test-forward',
            subject='test-forward-subject',
            body='test-foward-body')

        # Postbox.forward is MailAddress instance
        self.assertEqual(3, models.MailAddress.objects.count())

        # STEP1. sender -> recipient
        #
        self.me.server.handler.send_mail(
            mail, [recipient.address])
        # MailAddress is created for new outbound mail
        self.assertEqual(4, models.MailAddress.objects.count())

        # Save to Message because no SMTP connection(in TEST)
        self.assertEqual(1, models.Message.objects.count())
        message = models.Message.objects.first()
        self.assertEquals(message.server, recipient.server)

        # STEP2. recipient -> forwarded recipient
        # because recipient.address is registerd at Postbox
        message.process_message()

        self.assertEqual(2, models.Message.objects.count())
        forwarded_message = models.Message.objects.filter(
            recipient=recipient.forward).first()
        self.assertIsNotNone(forwarded_message)
        self.assertNotEquals(forwarded_message, message)

        self.assertEquals(forwarded_message.recipient,
                          recipient.forward.email)
        mo = forwarded_message.mailobject
        self.assertEquals(mo['To'], recipient.address)
        self.assertEquals(mo['From'], sender.address)

        self.assertEqual(forwarded_message.sender, message.relay_return_path)
        self.assertEqual(forwarded_message.recipient, message.relay_to)

        # create a bounced message for Relay for testing
        from emailsmtp.tasks import save_inbound
        save_inbound('debug',
                     'MAILER-DAEMON',
                     forwarded_message.sender,
                     forwarded_message.sender,      # original_recipient
                     forwarded_message.raw_message)
        self.assertEqual(3, models.Message.objects.count())
        bounced = models.Message.objects.last()
        original = models.Message.objects.find_original_message(bounced)
        self.assertEqual(original, message)

        # Relay map MUST be creaed
        self.assertEqual(1, models.Relay.objects.count())
        relay = models.Relay.objects.first()
        self.assertEqual(relay.sender.email,  message.sender)
        self.assertEqual(relay.postbox,  recipient)

        # MailAddress is created for new Relay sender
        self.assertEqual(5, models.MailAddress.objects.count())
        self.assertTrue(
            models.MailAddress.objects.filter(id=relay.sender.id).exists())