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()
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))
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))
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
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()
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('================================')