Example #1
0
 def test_exception_but_spammy(self):
     # Fails because the token doesn't exist in ActivityToken.objects
     assert not add_email_to_activity_log_wrapper(self.email_text, 10.0)
     assert not add_email_to_activity_log_wrapper(self.email_text, 10)
     assert not add_email_to_activity_log_wrapper(self.email_text, '10')
     assert not add_email_to_activity_log_wrapper(self.email_text, 11.0)
     # But no bounce.
     assert len(mail.outbox) == 0
     # but should be bounced if below the threshaold
     assert not add_email_to_activity_log_wrapper(self.email_text, 9.9)
Example #2
0
def process_email(message, spam_rating, **kwargs):
    """Parse emails and save activity log entry."""
    # Some emails (gmail, at least) come with Message-ID instead of MessageId.
    msg_id = message.get('MessageId')
    if not msg_id:
        custom_headers = message.get('CustomHeaders', [])
        for header in custom_headers:
            if header.get('Name', '').lower() == 'message-id':
                msg_id = header.get('Value')
    if not msg_id:
        log.warning('No MessageId in message, aborting.',
                    extra={'message_obj': message})
        return
    _, created = ActivityLogEmails.objects.get_or_create(messageid=msg_id)
    if not created:
        log.warning(
            'Already processed email [%s], skipping',
            msg_id,
            extra={'message_obj': message},
        )
        return
    res = add_email_to_activity_log_wrapper(message, spam_rating)

    if not res:
        log.error('Failed to process email [%s].',
                  msg_id,
                  extra={'message_obj': message})
Example #3
0
 def _test_exception_in_parser_but_can_send_email(self, message):
     assert not add_email_to_activity_log_wrapper(message)
     assert len(mail.outbox) == 1
     assert mail.outbox[0].body == (
         self.bounce_reply % 'Invalid or malformed json message object.')
     assert mail.outbox[0].subject == 'Re: your email to us'
     assert mail.outbox[0].to == ['*****@*****.**']
Example #4
0
 def _test_exception_in_parser_but_can_send_email(self, message):
     assert not add_email_to_activity_log_wrapper(message, 0)
     assert len(mail.outbox) == 1
     assert mail.outbox[0].body == (
         self.bounce_reply % 'Invalid or malformed json message object.')
     assert mail.outbox[0].subject == 'Re: your email to us'
     assert mail.outbox[0].to == ['*****@*****.**']
Example #5
0
 def test_exception_in_add_email_to_activity_log(self):
     # Fails because the token doesn't exist in ActivityToken.objects
     assert not add_email_to_activity_log_wrapper(self.email_text)
     assert len(mail.outbox) == 1
     out = mail.outbox[0]
     assert out.body == (
         self.bounce_reply %
         'UUID found in email address TO: header but is not a valid token '
         '(5a0b8a83d501412589cc5d562334b46b).')
     assert out.subject == 'Re: This is the subject of a test message.'
     assert out.to == ['*****@*****.**']
Example #6
0
 def test_exception_because_invalid_token(self):
     # Fails because the token doesn't exist in ActivityToken.objects
     assert not add_email_to_activity_log_wrapper(self.email_text, 0)
     assert len(mail.outbox) == 1
     out = mail.outbox[0]
     assert out.body == (
         self.bounce_reply %
         'UUID found in email address TO: header but is not a valid token '
         '(5a0b8a83d501412589cc5d562334b46b).')
     assert out.subject == 'Re: This is the subject of a test message.'
     assert out.to == ['*****@*****.**']
Example #7
0
 def test_exception_to_notifications_alias(self):
     email_text = copy.deepcopy(self.email_text)
     email_text['To'] = [{
         'EmailAddress': 'notifications@%s' % settings.INBOUND_EMAIL_DOMAIN,
         'FriendlyName': 'not a valid activity mail reply'}]
     assert not add_email_to_activity_log_wrapper(email_text)
     assert len(mail.outbox) == 1
     out = mail.outbox[0]
     assert ('This email address is not meant to receive emails '
             'directly.') in out.body
     assert out.subject == 'Re: This is the subject of a test message.'
     assert out.to == ['*****@*****.**']
Example #8
0
 def test_exception_to_notifications_alias(self):
     email_text = copy.deepcopy(self.email_text)
     email_text['To'] = [{
         'EmailAddress': 'notifications@%s' % settings.INBOUND_EMAIL_DOMAIN,
         'FriendlyName': 'not a valid activity mail reply'}]
     assert not add_email_to_activity_log_wrapper(email_text)
     assert len(mail.outbox) == 1
     out = mail.outbox[0]
     assert ('This email address is not meant to receive emails '
             'directly.') in out.body
     assert out.subject == 'Re: This is the subject of a test message.'
     assert out.to == ['*****@*****.**']
Example #9
0
 def test_exception_because_invalid_email(self):
     # Fails because the token doesn't exist in ActivityToken.objects
     email_text = copy.deepcopy(self.email_text)
     email_text['To'] = [{
         'EmailAddress': '*****@*****.**',
         'FriendlyName': 'not a valid activity mail reply'}]
     assert not add_email_to_activity_log_wrapper(email_text)
     assert len(mail.outbox) == 1
     out = mail.outbox[0]
     assert out.body == (
         self.bounce_reply %
         'TO: address does not contain activity email uuid ('
         '[email protected]).')
     assert out.subject == 'Re: This is the subject of a test message.'
     assert out.to == ['*****@*****.**']
Example #10
0
 def test_exception_because_invalid_email(self):
     # Fails because the token doesn't exist in ActivityToken.objects
     email_text = copy.deepcopy(self.email_text)
     email_text['To'] = [{
         'EmailAddress': '*****@*****.**',
         'FriendlyName': 'not a valid activity mail reply'}]
     assert not add_email_to_activity_log_wrapper(email_text)
     assert len(mail.outbox) == 1
     out = mail.outbox[0]
     assert out.body == (
         self.bounce_reply %
         'TO: address does not contain activity email uuid ('
         '[email protected]).')
     assert out.subject == 'Re: This is the subject of a test message.'
     assert out.to == ['*****@*****.**']
Example #11
0
def process_email(message, **kwargs):
    """Parse emails and save activity log entry."""
    msg_id = message.get('MessageId', None)
    if not msg_id:
        log.error('No MessageId in message, aborting.')
        return
    cache_key = 'process_email:%s' % msg_id
    if cache.get(cache_key):
        log.error('Already processed [%s] in the last 60s, skipping' % msg_id)
        return
    cache.set(cache_key, 'yes', 60)
    res = add_email_to_activity_log_wrapper(message)

    if not res:
        log.error('Failed to save email.')
Example #12
0
def process_email(message, **kwargs):
    """Parse emails and save activity log entry."""
    msg_id = message.get('MessageId', None)
    if not msg_id:
        log.error('No MessageId in message, aborting.')
        return
    cache_key = 'process_email:%s' % msg_id
    if cache.get(cache_key):
        log.error('Already processed [%s] in the last 60s, skipping' % msg_id)
        return
    cache.set(cache_key, 'yes', 60)
    res = add_email_to_activity_log_wrapper(message)

    if not res:
        log.error('Failed to save email.')
Example #13
0
    def test_no_note_logged(self, log_mock):
        # First set everything up so it's working
        addon = addon_factory()
        user = user_factory()
        self.grant_permission(user, '*:*')
        ActivityLogToken.objects.create(
            user=user,
            version=addon.latest_version,
            uuid='5a0b8a83d501412589cc5d562334b46b')
        # Make log_mock return false for some reason.
        log_mock.return_value = False

        # No exceptions thrown, but no log means something went wrong.
        assert not add_email_to_activity_log_wrapper(self.email_text)
        assert len(mail.outbox) == 1
        out = mail.outbox[0]
        assert out.body == (self.bounce_reply % 'Undefined Error.')
        assert out.subject == 'Re: This is the subject of a test message.'
        assert out.to == ['*****@*****.**']
Example #14
0
    def test_no_note_logged(self, log_mock):
        # First set everything up so it's working
        addon = addon_factory()
        version = addon.find_latest_version(channel=amo.RELEASE_CHANNEL_LISTED)
        user = user_factory()
        self.grant_permission(user, '*:*')
        ActivityLogToken.objects.create(
            user=user, version=version,
            uuid='5a0b8a83d501412589cc5d562334b46b')
        # Make log_mock return false for some reason.
        log_mock.return_value = False

        # No exceptions thrown, but no log means something went wrong.
        assert not add_email_to_activity_log_wrapper(self.email_text)
        assert len(mail.outbox) == 1
        out = mail.outbox[0]
        assert out.body == (
            self.bounce_reply % 'Undefined Error.')
        assert out.subject == 'Re: This is the subject of a test message.'
        assert out.to == ['*****@*****.**']
Example #15
0
def process_email(message, **kwargs):
    """Parse emails and save activity log entry."""
    # Some emails (gmail, at least) come with Message-ID instead of MessageId.
    msg_id = message.get('MessageId')
    if not msg_id:
        custom_headers = message.get('CustomHeaders', [])
        for header in custom_headers:
            if header.get('Name') == 'Message-ID':
                msg_id = header.get('Value')
    if not msg_id:
        log.error('No MessageId in message, aborting.')
        log.error(message)
        return
    _, created = ActivityLogEmails.objects.get_or_create(messageid=msg_id)
    if not created:
        log.error('Already processed [%s], skipping' % msg_id)
        log.error(message)
        return
    res = add_email_to_activity_log_wrapper(message)

    if not res:
        log.error('Failed to save email.')
Example #16
0
def process_email(message, **kwargs):
    """Parse emails and save activity log entry."""
    # Some emails (gmail, at least) come with Message-ID instead of MessageId.
    msg_id = message.get('MessageId')
    if not msg_id:
        custom_headers = message.get('CustomHeaders', [])
        for header in custom_headers:
            if header.get('Name') == 'Message-ID':
                msg_id = header.get('Value')
    if not msg_id:
        log.error('No MessageId in message, aborting.')
        log.error(message)
        return
    _, created = ActivityLogEmails.objects.get_or_create(messageid=msg_id)
    if not created:
        log.error('Already processed [%s], skipping' % msg_id)
        log.error(message)
        return
    res = add_email_to_activity_log_wrapper(message)

    if not res:
        log.error('Failed to save email.')
Example #17
0
def process_email(message, **kwargs):
    """Parse emails and save activity log entry."""
    # Some emails (gmail, at least) come with Message-ID instead of MessageId.
    msg_id = message.get('MessageId')
    if not msg_id:
        custom_headers = message.get('CustomHeaders', [])
        for header in custom_headers:
            if header.get('Name') == 'Message-ID':
                msg_id = header.get('Value')
    if not msg_id:
        log.error('No MessageId in message, aborting.')
        log.error(message)
        return
    cache_key = 'process_email:%s' % msg_id
    if cache.get(cache_key):
        log.error('Already processed [%s] in the last 60s, skipping' % msg_id)
        log.error(message)
        return
    cache.set(cache_key, 'yes', 60)
    res = add_email_to_activity_log_wrapper(message)

    if not res:
        log.error('Failed to save email.')
Example #18
0
def process_email(message, **kwargs):
    """Parse emails and save activity log entry."""
    res = add_email_to_activity_log_wrapper(message)

    if not res:
        log.error('Failed to save email.')
Example #19
0
 def test_exception_parser_because_malformed_message(self):
     assert not add_email_to_activity_log_wrapper("blah de blah")
     # No From or Reply means no bounce, alas.
     assert len(mail.outbox) == 0
Example #20
0
 def test_exception_but_bouncing_waffle_off(self):
     # Fails because the token doesn't exist in ActivityToken.objects
     assert not add_email_to_activity_log_wrapper(self.email_text)
     # But no bounce.
     assert len(mail.outbox) == 0
Example #21
0
 def test_exception_but_bouncing_waffle_off(self):
     # Fails because the token doesn't exist in ActivityToken.objects
     assert not add_email_to_activity_log_wrapper(self.email_text, 0)
     # But no bounce.
     assert len(mail.outbox) == 0
Example #22
0
 def test_exception_parser_because_malformed_message(self):
     assert not add_email_to_activity_log_wrapper('blah de blah', 0)
     # No From or Reply means no bounce, alas.
     assert len(mail.outbox) == 0