Esempio n. 1
0
    def test_correct_bounces_created(self):
        """Test to ensure that bounces are correctly inserted"""
        # Delete any existing bounces
        Bounce.objects.all().delete()

        result = views.process_bounce(self.bounce, self.notification)

        self.assertEqual(result.status_code, 200)
        self.assertEqual(result.content.decode('ascii'), 'Bounce Processed')
        self.assertTrue(Bounce.objects.filter(
            sns_topic=('arn:aws:sns:us-east-1:250214102493:'
                       'Demo_App_Unsubscribes'),
            sns_messageid='f34c6922-c3a1-54a1-bd88-23f998b43978',
            mail_timestamp=clean_time('2012-06-19T01:05:45.000Z'),
            mail_id=('00000138111222aa-33322211-cccc-cccc-cccc-'
                     'ddddaaaa0680-000000'),
            mail_from='*****@*****.**',
            address='*****@*****.**',
            feedback_id=('000001378603176d-5a4b5ad9-6f30-4198-a8c3-'
                         'b1eb0c270a1d-000000'),
            feedback_timestamp=clean_time('2012-05-25T14:59:38.605-07:00'),
            hard=True,
            bounce_type='Permanent',
            bounce_subtype='General',
            reporting_mta='example.com',
            action='failed',
            status='5.0.0',
            diagnostic_code='smtp; 550 user unknown'
        ).exists())
Esempio n. 2
0
    def test_correct_complaint_created(self):
        """Test that the correct complaint was created"""
        Complaint.objects.all().delete()

        result = views.process_complaint(self.complaint,
                                         self.complaint_notification)

        self.assertEqual(result.status_code, 200)
        self.assertEqual(result.content.decode('ascii'), 'Complaint Processed')
        self.assertTrue(
            Complaint.objects.filter(
                sns_topic=('arn:aws:sns:us-east-1:250214102493:'
                           'Demo_App_Unsubscribes'),
                sns_messageid='217eaf35-67ae-5230-874a-e5df4c5c71c0',
                mail_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'),
                mail_id=('000001378603177f-7a5433e7-8edb-42ae-af10-'
                         'f0181f34d6ee-000000'),
                mail_from='*****@*****.**',
                address='*****@*****.**',
                feedback_id=('000001378603177f-18c07c78-fa81-4a58-9dd1-'
                             'fedc3cb8f49a-000000'),
                feedback_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'),
                useragent='Comcast Feedback Loop (V0.01)',
                arrival_date=clean_time(
                    '2009-12-03T04:24:21.000-05:00')).exists())
Esempio n. 3
0
    def test_correct_bounces_created(self):
        """Test to ensure that bounces are correctly inserted"""
        # Delete any existing bounces
        Bounce.objects.all().delete()

        result = views.process_bounce(self.bounce, self.notification)

        self.assertEqual(result.status_code, 200)
        self.assertEqual(result.content.decode('ascii'), 'Bounce Processed')
        self.assertTrue(
            Bounce.objects.filter(
                sns_topic=('arn:aws:sns:us-east-1:250214102493:'
                           'Demo_App_Unsubscribes'),
                sns_messageid='f34c6922-c3a1-54a1-bd88-23f998b43978',
                mail_timestamp=clean_time('2012-06-19T01:05:45.000Z'),
                mail_id=('00000138111222aa-33322211-cccc-cccc-cccc-'
                         'ddddaaaa0680-000000'),
                mail_from='*****@*****.**',
                address='*****@*****.**',
                feedback_id=('000001378603176d-5a4b5ad9-6f30-4198-a8c3-'
                             'b1eb0c270a1d-000000'),
                feedback_timestamp=clean_time('2012-05-25T14:59:38.605-07:00'),
                hard=True,
                bounce_type='Permanent',
                bounce_subtype='General',
                reporting_mta='example.com',
                action='failed',
                status='5.0.0',
                diagnostic_code='smtp; 550 user unknown').exists())
Esempio n. 4
0
def process_bounce(message, notification):
    """Function to process a bounce notification"""
    mail = message["mail"]
    bounce = message["bounce"]

    bounces = []
    for recipient in bounce["bouncedRecipients"]:
        # Create each bounce record. Add to a list for reference later.
        bounces += [
            Bounce.objects.create(
                sns_topic=notification["TopicArn"],
                sns_messageid=notification["MessageId"],
                mail_timestamp=clean_time(mail["timestamp"]),
                mail_id=mail["messageId"],
                mail_from=mail["source"],
                address=recipient["emailAddress"],
                feedback_id=bounce["feedbackId"],
                feedback_timestamp=clean_time(bounce["timestamp"]),
                hard=bool(bounce["bounceType"] == "Permanent"),
                bounce_type=bounce["bounceType"],
                bounce_subtype=bounce["bounceSubType"],
                reporting_mta=bounce.get("reportingMTA"),
                action=recipient.get("action"),
                status=recipient.get("status"),
                diagnostic_code=recipient.get("diagnosticCode"),
            )
        ]

    # Send signals for each bounce.
    for bounce in bounces:
        signals.feedback.send(sender=Bounce, instance=bounce, message=message, notification=notification)

    logger.info("Logged %s Bounce(s)", str(len(bounces)))

    return HttpResponse("Bounce Processed")
Esempio n. 5
0
def process_complaint(message, notification):
    """Function to process a complaint notification"""
    mail = message['mail']
    complaint = message['complaint']

    if 'arrivalDate' in complaint:
        arrival_date = clean_time(complaint['arrivalDate'])
    else:
        arrival_date = None

    complaints = []
    for recipient in complaint['complainedRecipients']:
        # Create each Complaint. Save in a list for reference later.
        complaints += [
            Complaint.objects.create(
                sns_topic=notification['TopicArn'],
                sns_messageid=notification['MessageId'],
                mail_timestamp=clean_time(mail['timestamp']),
                mail_id=mail['messageId'],
                mail_from=mail['source'],
                address=recipient['emailAddress'],
                feedback_id=complaint['feedbackId'],
                feedback_timestamp=clean_time(complaint['timestamp']),
                useragent=complaint.get('userAgent'),
                feedback_type=complaint.get('complaintFeedbackType'),
                arrival_date=arrival_date,
                dump=message,
            )
        ]

    # Send signals for each complaint.
    for complaint in complaints:
        signals.feedback.send(sender=Complaint,
                              instance=complaint,
                              message=message,
                              notification=notification)

    logger.info('Logged %s Complaint(s)', str(len(complaints)))

    return HttpResponse('Complaint Processed')
Esempio n. 6
0
    def test_correct_delivery_created(self):
        """Test that the correct delivery was created"""
        Delivery.objects.all().delete()

        result = views.process_delivery(
            self.delivery, self.delivery_notification)

        self.assertEqual(result.status_code, 200)
        self.assertEqual(result.content.decode('ascii'), 'Delivery Processed')
        self.assertTrue(Delivery.objects.filter(
            sns_topic='arn:aws:sns:us-east-1:674400795651:Bouncy_Test',
            sns_messageid='fbdf2eda-c5ed-5096-a8d7-61a043f7db6e',
            mail_timestamp=clean_time('2014-05-28T22:40:59.638Z'),
            mail_id='0000014644fe5ef6-9a483358-9170-4cb4-a269-f5dcdf415321-000'
                    '000',
            mail_from='*****@*****.**',
            address='*****@*****.**',
            # delivery
            delivered_time=clean_time('2014-05-28T22:41:01.184Z'),
            processing_time=546,
            smtp_response='250 ok:  Message 64111812 accepted'
        ).exists())
Esempio n. 7
0
def process_delivery(message, notification):
    """Function to process a delivery notification"""
    mail = message['mail']
    delivery = message['delivery']

    if 'timestamp' in delivery:
        delivered_datetime = clean_time(delivery['timestamp'])
    else:
        delivered_datetime = None

    deliveries = []
    for eachrecipient in delivery['recipients']:
        # Create each delivery
        deliveries += [
            Delivery.objects.create(
                sns_topic=notification['TopicArn'],
                sns_messageid=notification['MessageId'],
                mail_timestamp=clean_time(mail['timestamp']),
                mail_id=mail['messageId'],
                mail_from=mail['source'],
                address=eachrecipient,
                # delivery
                delivered_time=delivered_datetime,
                processing_time=int(delivery['processingTimeMillis']),
                smtp_response=delivery['smtpResponse'],
                dump=message,
            )
        ]

    # Send signals for each delivery.
    for eachdelivery in deliveries:
        signals.feedback.send(sender=Delivery,
                              instance=eachdelivery,
                              message=message,
                              notification=notification)

    logger.info('Logged %s Deliveries(s)', str(len(deliveries)))

    return HttpResponse('Delivery Processed')
Esempio n. 8
0
def process_bounce(message, notification):
    """Function to process a bounce notification"""
    mail = message['mail']
    bounce = message['bounce']

    bounces = []
    for recipient in bounce['bouncedRecipients']:
        # Create each bounce record. Add to a list for reference later.
        bounces += [
            Bounce.objects.create(
                sns_topic=notification['TopicArn'],
                sns_messageid=notification['MessageId'],
                mail_timestamp=clean_time(mail['timestamp']),
                mail_id=mail['messageId'],
                mail_from=mail['source'],
                address=recipient['emailAddress'],
                feedback_id=bounce['feedbackId'],
                feedback_timestamp=clean_time(bounce['timestamp']),
                hard=bool(bounce['bounceType'] == 'Permanent'),
                bounce_type=bounce['bounceType'],
                bounce_subtype=bounce['bounceSubType'],
                reporting_mta=bounce.get('reportingMTA'),
                action=recipient.get('action'),
                status=recipient.get('status'),
                diagnostic_code=recipient.get('diagnosticCode'),
                dump=message,
            )
        ]

    # Send signals for each bounce.
    for bounce in bounces:
        signals.feedback.send(sender=Bounce,
                              instance=bounce,
                              message=message,
                              notification=notification)

    logger.info('Logged %s Bounce(s)', str(len(bounces)))

    return HttpResponse('Bounce Processed')
Esempio n. 9
0
def process_complaint(message, notification):
    """Function to process a complaint notification"""
    mail = message['mail']
    complaint = message['complaint']

    if 'arrivalDate' in complaint:
        arrival_date = clean_time(complaint['arrivalDate'])
    else:
        arrival_date = None

    complaints = []
    for recipient in complaint['complainedRecipients']:
        # Create each Complaint. Save in a list for reference later.
        complaints += [Complaint.objects.create(
            sns_topic=notification['TopicArn'],
            sns_messageid=notification['MessageId'],
            mail_timestamp=clean_time(mail['timestamp']),
            mail_id=mail['messageId'],
            mail_from=mail['source'],
            address=recipient['emailAddress'],
            feedback_id=complaint['feedbackId'],
            feedback_timestamp=clean_time(complaint['timestamp']),
            useragent=complaint.get('userAgent'),
            feedback_type=complaint.get('complaintFeedbackType'),
            arrival_date=arrival_date
        )]

    # Send signals for each complaint.
    for complaint in complaints:
        signals.feedback.send(
            sender=Complaint,
            instance=complaint,
            message=message,
            notification=notification
        )

    logger.info('Logged %s Complaint(s)', str(len(complaints)))

    return HttpResponse('Complaint Processed')
Esempio n. 10
0
def process_bounce(message, notification):
    """Function to process a bounce notification"""
    mail = message['mail']
    bounce = message['bounce']

    bounces = []
    for recipient in bounce['bouncedRecipients']:
        # Create each bounce record. Add to a list for reference later.
        bounces += [Bounce.objects.create(
            sns_topic=notification['TopicArn'],
            sns_messageid=notification['MessageId'],
            mail_timestamp=clean_time(mail['timestamp']),
            mail_id=mail['messageId'],
            mail_from=mail['source'],
            address=recipient['emailAddress'],
            feedback_id=bounce['feedbackId'],
            feedback_timestamp=clean_time(bounce['timestamp']),
            hard=bool(bounce['bounceType'] == 'Permanent'),
            bounce_type=bounce['bounceType'],
            bounce_subtype=bounce['bounceSubType'],
            reporting_mta=bounce.get('reportingMTA'),
            action=recipient.get('action'),
            status=recipient.get('status'),
            diagnostic_code=recipient.get('diagnosticCode')
        )]

    # Send signals for each bounce.
    for bounce in bounces:
        signals.feedback.send(
            sender=Bounce,
            instance=bounce,
            message=message,
            notification=notification
        )

    logger.info('Logged %s Bounce(s)', str(len(bounces)))

    return HttpResponse('Bounce Processed')
Esempio n. 11
0
def process_delivery(message, notification):
    """Function to process a delivery notification"""
    mail = message['mail']
    delivery = message['delivery']

    if 'timestamp' in delivery:
        delivered_datetime = clean_time(delivery['timestamp'])
    else:
        delivered_datetime = None

    deliveries = []
    for eachrecipient in delivery['recipients']:
        # Create each delivery 
        deliveries += [Delivery.objects.create(
            sns_topic=notification['TopicArn'],
            sns_messageid=notification['MessageId'],
            mail_timestamp=clean_time(mail['timestamp']),
            mail_id=mail['messageId'],
            mail_from=mail['source'],
            address=eachrecipient,
            # delivery
            delivered_time=delivered_datetime,
            processing_time=int(delivery['processingTimeMillis']),
            smtp_response=delivery['smtpResponse']
        )]

    # Send signals for each delivery.
    for eachdelivery in deliveries:
        signals.feedback.send(
            sender=Delivery,
            instance=eachdelivery,
            message=message,
            notification=notification
        )

    logger.info('Logged %s Deliveries(s)', str(len(deliveries)))

    return HttpResponse('Delivery Processed')
Esempio n. 12
0
    def test_correct_delivery_created_long_response_time(self):
        """Test that the correct delivery was created with a long processing_time"""
        Delivery.objects.all().delete()
        self.delivery['delivery']['processingTimeMillis'] = 123999123
        result = views.process_delivery(self.delivery,
                                        self.delivery_notification)

        self.assertEqual(result.status_code, 200)
        self.assertEqual(result.content.decode('ascii'), 'Delivery Processed')
        self.assertTrue(
            Delivery.objects.filter(
                sns_topic='arn:aws:sns:us-east-1:674400795651:Bouncy_Test',
                sns_messageid='fbdf2eda-c5ed-5096-a8d7-61a043f7db6e',
                mail_timestamp=clean_time('2014-05-28T22:40:59.638Z'),
                mail_id=
                '0000014644fe5ef6-9a483358-9170-4cb4-a269-f5dcdf415321-000'
                '000',
                mail_from='*****@*****.**',
                address='*****@*****.**',
                # delivery
                delivered_time=clean_time('2014-05-28T22:41:01.184Z'),
                processing_time=123999123,
                smtp_response='250 ok:  Message 64111812 accepted').exists())
Esempio n. 13
0
    def test_correct_complaint_created(self):
        """Test that the correct complaint was created"""
        Complaint.objects.all().delete()

        result = views.process_complaint(
            self.complaint, self.complaint_notification)

        self.assertEqual(result.status_code, 200)
        self.assertEqual(result.content.decode('ascii'), 'Complaint Processed')
        self.assertTrue(Complaint.objects.filter(
            sns_topic=('arn:aws:sns:us-east-1:250214102493:'
                       'Demo_App_Unsubscribes'),
            sns_messageid='217eaf35-67ae-5230-874a-e5df4c5c71c0',
            mail_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'),
            mail_id=('000001378603177f-7a5433e7-8edb-42ae-af10-'
                     'f0181f34d6ee-000000'),
            mail_from='*****@*****.**',
            address='*****@*****.**',
            feedback_id=('000001378603177f-18c07c78-fa81-4a58-9dd1-'
                         'fedc3cb8f49a-000000'),
            feedback_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'),
            useragent='Comcast Feedback Loop (V0.01)',
            arrival_date=clean_time('2009-12-03T04:24:21.000-05:00')
        ).exists())
Esempio n. 14
0
def process_complaint(message, notification):
    """Function to process a complaint notification"""
    mail = message["mail"]
    complaint = message["complaint"]

    if "arrivalDate" in complaint:
        arrival_date = clean_time(complaint["arrivalDate"])
    else:
        arrival_date = None

    complaints = []
    for recipient in complaint["complainedRecipients"]:
        # Create each Complaint. Save in a list for reference later.
        complaints += [
            Complaint.objects.create(
                sns_topic=notification["TopicArn"],
                sns_messageid=notification["MessageId"],
                mail_timestamp=clean_time(mail["timestamp"]),
                mail_id=mail["messageId"],
                mail_from=mail["source"],
                address=recipient["emailAddress"],
                feedback_id=complaint["feedbackId"],
                feedback_timestamp=clean_time(complaint["timestamp"]),
                useragent=complaint.get("userAgent"),
                feedback_type=complaint.get("complaintFeedbackType"),
                arrival_date=arrival_date,
            )
        ]

    # Send signals for each complaint.
    for complaint in complaints:
        signals.feedback.send(sender=Complaint, instance=complaint, message=message, notification=notification)

    logger.info("Logged %s Complaint(s)", str(len(complaints)))

    return HttpResponse("Complaint Processed")