Beispiel #1
0
    def test_returnpath(self):
        ''' python ../manage.py test paloma.BounceTest.test_returnpath
        '''
        import exceptions
        from paloma.models import default_return_path, return_path_from_address
        MSG_FMT = "bcmsg-%(message_id)s@%(domain)s"

        param = {'message_id': 3, "domain": "hogehoge.com"}

        return_path = default_return_path(param)
        result = return_path_from_address(return_path)

        for (k, v) in result.items():
            self.assertEqual(str(param[k]), v)

        for mail in [
                '',
                '*****@*****.**',
        ]:
            with self.assertRaises(exceptions.AttributeError) as cm:
                print "return_path_from_address(%s)" % str(
                    mail), "=> AttributeError"
                result = return_path_from_address(mail)

        for mail in [None]:
            with self.assertRaises(exceptions.TypeError) as cm:
                print "return_path_from_address(%s)" % str(
                    mail), "=> TypeError"
                result = return_path_from_address(mail)
Beispiel #2
0
def process_error_mail(recipient, sender, journal_id):
    """ Error Mail Checker and Handler

        - return True if mail was processed, owtherwise False

        :param recipient: destination mailbox address
        :type recipient: str
        :param sender: sender mailbox address
        :type recipient: str
        :param journal_id: Journal model id
        :type journal_id: int
        :rtype: bool (True : processed, False not processed)

    .. todo::
        - update journal error code or error reseon ?
    """

    if recipient in ['', None]:
        #: Simpley Error Mail!
        #: TODO: error marking...
        return True

    try:
        param = return_path_from_address(recipient)
        assert param['message_id'] != ""
        assert param['domain'] != ""

        try:
            #: Jourmal mail object
            journal_msg = Journal.objects.get(id=journal_id).mailobject()
            error_address = journal_msg.get('X-Failed-Recipients')
        except:
            pass

        try:
            #: Find message
            msg = Message.objects.get(id=int(param['message_id']),
                                      schedule__owner__domain=param['domain'])

            #:X-Failed-Recipients SHOULD be checked ?
            assert (error_address == None
                    or error_address == msg.mailbox.address)

            #: increment bounce number
            #: this mailbox will be disabled sometimes later.
            msg.mailbox.bounces = msg.mailbox.bounces + 1
            msg.mailbox.save()

            #:
            return True

        except:
            pass

    except exceptions.AttributeError, e:
        #:May be normal address..
        #:Other handler will be called.
        return False
Beispiel #3
0
def process_error_mail(recipient,sender,journal_id):
    """ Error Mail Checker and Handler

        - return True if mail was processed, owtherwise False

        :param recipient: destination mailbox address
        :type recipient: str
        :param sender: sender mailbox address
        :type recipient: str
        :param journal_id: Journal model id
        :type journal_id: int
        :rtype: bool (True : processed, False not processed)

    .. todo::
        - update journal error code or error reseon ?
    """

    if recipient in ['',None]:
        #: Simpley Error Mail!
        #: TODO: error marking... 
        return True
    
    try:
        param =  return_path_from_address(recipient)
        assert param['message_id'] != ""
        assert param['domain'] != ""
        
        try:
            #: Jourmal mail object
            journal_msg=Journal.objects.get(id=journal_id).mailobject()
            error_address= journal_msg.get('X-Failed-Recipients')
        except:
            pass

        try:
            #: Find message
            msg = Message.objects.get(id=int(param['message_id']),
                    schedule__owner__domain = param['domain'])

            #:X-Failed-Recipients SHOULD be checked ?
            assert ( error_address == None or error_address == msg.mailbox.address )

            #: increment bounce number
            #: this mailbox will be disabled sometimes later.
            msg.mailbox.bounces = msg.mailbox.bounces+ 1
            msg.mailbox.save()

            #:
            return True

        except:
            pass
            
    except exceptions.AttributeError,e:
        #:May be normal address..
        #:Other handler will be called.
        return False
Beispiel #4
0
    def test_returnpath(self):
        ''' python ../manage.py test paloma.BounceTest.test_returnpath
        '''
        import exceptions
        from paloma.models import default_return_path ,return_path_from_address
        MSG_FMT="bcmsg-%(message_id)s@%(domain)s"

        param = {'message_id': 3, "domain":"hogehoge.com" }

        return_path = default_return_path(param)
        result = return_path_from_address(return_path)

        for (k,v) in result.items():
            self.assertEqual(str(param[k]), v )

        for mail in ['','*****@*****.**', ]:
            with self.assertRaises(exceptions.AttributeError) as cm:
                print "return_path_from_address(%s)" % str(mail), "=> AttributeError"
                result = return_path_from_address(mail)

        for mail in [None] :
            with self.assertRaises(exceptions.TypeError) as cm:
                print "return_path_from_address(%s)" % str(mail), "=> TypeError"
                result = return_path_from_address(mail)