Ejemplo n.º 1
0
    def load_messages(self):
        """Busca los mensajes en el servidor pop
        """
        pop_server = self.get_pop_server()
        email_parser = emailParser()
        self.messages = {}

        for email_ids in pop_server.uidl()[1]:
            email_ids = email_ids.decode("utf-8")
            email_nro, email_uid = email_ids.split(' ')
            try:
                email_data = b'\n'.join(pop_server.retr(email_nro)[1])
            except Exception:
                logging.error('Error leyendo email uid: %s\n%s' %
                              (email_uid, traceback.format_exc()))
                continue
            email = email_parser.parse(BytesIO(email_data))
            logging.info('Leyendo email asunto: %s' %
                         email.get('subject', None))
            if self.is_sinliarg(email):
                logging.debug('  email sinliarg reconocido')
                self.messages[email_uid] = email

        pop_server.quit()
        return self.messages.keys()
Ejemplo n.º 2
0
    def test_is_sinliarg(self):
        """Verifica que se reconozcan los emails de sinliarg
        """
        with open(os.path.join(self.test_path, 'email_sinliarg')) as i:
            email = emailParser().parse(i)
        self.assertTrue(self.ch.is_sinliarg(email))

        del email['subject']
        email['subject'] = 'ignorame'
        self.assertFalse(self.ch.is_sinliarg(email))
Ejemplo n.º 3
0
    def test_is_sinliarg(self):
        """Verifica que se reconozcan los emails de sinliarg
        """
        with open(os.path.join(self.test_path, 'email_sinliarg')) as i:
                email = emailParser().parse(i)
        self.assertTrue(self.ch.is_sinliarg(email))

        del email['subject']
        email['subject'] = 'ignorame'
        self.assertFalse(self.ch.is_sinliarg(email))
Ejemplo n.º 4
0
    def test_get_message(self):
        """Verifica que devuelva el mensaje cargado
        """
        # cuando el mensaje no fue leido levanta una excepcion
        self.assertRaises(Exception, self.ch.get_message, '00000010506477be')

        # devuelve el mensaje
        with open(os.path.join(self.test_path, 'email_sinliarg')) as i:
            email = emailParser().parse(i)
        self.ch.messages = {'00000010506477be': email}

        m = self.ch.get_message('00000010506477be')
        self.assertTrue(isinstance(m, ftp2email.SinliargMessage))
Ejemplo n.º 5
0
    def test_get_message(self):
        """Verifica que devuelva el mensaje cargado
        """
        # cuando el mensaje no fue leido levanta una excepcion
        self.assertRaises(Exception, self.ch.get_message, '00000010506477be')

        # devuelve el mensaje
        with open(os.path.join(self.test_path, 'email_sinliarg')) as i:
                email = emailParser().parse(i)
        self.ch.messages = {'00000010506477be': email}

        m = self.ch.get_message('00000010506477be')
        self.assertTrue(isinstance(m, ftp2email.SinliargMessage))
Ejemplo n.º 6
0
    def create_from_email_str(cls, email_as_str):
        # parse it into an email object
        # shove the unicode email string into a stringio before parsing
        # this is madness. why???
        # because email.parser chokes on unicode. i don't know why.
        # maybe some day we'll be able to do this:
        #parsed_email = emailParser().parsestr(email_as_str)
        # until then:
        parsed_email = emailParser().parse(StringIO.StringIO(email_as_str))
        if not parsed_email['From'] and not parsed_email['To'] and not parsed_email['Body']:
            #import ipdb; ipdb.set_trace()
            print "error parsing email"
            # for now, just explode:
            assert False
        if not parsed_email['From'] or not parsed_email['To']:
            print "email missing crucial field"
            # for now, just explode:
            assert False
        e = Email()
        e.plaintext = email_as_str
        email_obj_field_to_model_field_mappings = {
            'To' : 'to',
            #'From' : 'from_field',
            'Cc' : 'cc',
            'Subject' : 'subject',
            'Return-Path' : 'return_path',
            'X-Original-To' : 'x_original_to',
            'Delivered-To' : 'delivered_to',
            'Received' : 'received',
            'X-Mailer' : 'x_mailer',
            'Message-Id' : 'message_id',
            }
        e.date = datetime.datetime(*rfc822.parsedate_tz(parsed_email['Date'])[:6])
        e.body = cls.get_message_body_as_one_str(parsed_email)
        e.from_field = parsed_email['From'] #cls.parse_from_field(parsed_email['From'])
        for email_field, model_field in email_obj_field_to_model_field_mappings.iteritems():
          setattr(e, model_field, parsed_email[email_field])

        # get or create the user who sent this email
        e.user = EmailAddress.get_or_create_user_with_address(e.from_email())
        #e.user, created = User.objects.get_or_create(email=e.from_email())
        e.save() #TODO: might not be necessary. not sure.
        assert e.user

        return e
Ejemplo n.º 7
0
    def load_messages(self):
        """Busca los mensajes en el servidor pop
        """
        pop_server = self.get_pop_server()
        email_parser = emailParser()
        self.messages = {}

        for email_ids in pop_server.uidl()[1]:
            email_nro, email_uid = email_ids.split(' ')
            try:
                email_data = '\n'.join(pop_server.retr(email_nro)[1])
                email = email_parser.parsestr(email_data)
            except Exception:
                logging.error('Error leyendo email uid: %s\n%s' % (email_uid, traceback.format_exc()))
                continue
            logging.info('Leyendo email asunto: %s' % email.get('subject', None))
            if self.is_sinliarg(email):
                logging.debug('  email sinliarg reconocido')
                self.messages[email_uid] = email

        pop_server.quit()
        return self.messages.keys()
Ejemplo n.º 8
0
    print "-----------------------"
elif options.output == 'only_server_response':
    print output


######################
# CASE: SOMETHING WENT WRONG ON HEROKU'S END
######################
if output != SUCCESS_OUTPUT:
    from email.parser import Parser as emailParser
    import email.utils
    import smtplib
    from email.mime.text import MIMEText

    # get their email address
    parsed_email = emailParser().parse(StringIO.StringIO(email_str))
    if not parsed_email['From']:
        parsed_email['From'] = get_from_field_by_force_from_email_str(email_str)
    real_name, email_addr = email.utils.parseaddr(parsed_email['From'])
    assert email_addr

    # email them the output
    # assemble the email
    # body:
    to_addr = email_addr
    from_addr = '*****@*****.**'
    email_strs = ['CalendarItem failed to process your email. Something went horribly wrong. This is super lame and we\'re real sorry about it. Here\'s what the server said:\n\n']
    email_strs.append(output)
    email_strs.append('================================')
    email_strs.append('and here\'s the email you sent us, just to be sure:')
    email_strs.append('================================')