Ejemplo n.º 1
0
def descargar_adjuntos_no_cambio_idmsg(vhost, vuser, vpassword, vbuzon, vroot,
                                       vcriterio, vcarpetatemp):
    respuesta = {'resultado': 'OK', 'cantidad_correos': 0, 'error': ''}
    try:
        # Crear la carpeta
        # carpeta_file = vcarpetatemp
        # procesos_comunes.elimina_carpeta(vroot, carpeta_file)
        # procesos_comunes.crea_carpeta(vroot, carpeta_file)
        # svdir = os.path.join(vroot, carpeta_file)
        svdir = vcarpetatemp

        mail = imaplib.IMAP4_SSL(vhost, 993)
        mail.login(vuser, vpassword)
        typ, data = mail.select(vbuzon)
        if typ != 'OK':
            raise ValueError('No existe la carpeta {}'.format(vbuzon))
        num_msgs = int(data[0])
        #print('Existen {} correos en {}'.format(num_msgs, vbuzon))
        respuesta['cantidad_correos'] = num_msgs

        # Filtrado por Subject
        typ, msgs = mail.search(None, vcriterio)
        # print('Existen {} correos con el Subject indicado '.format(msgs[0]))

        # Descargado de adjuntos
        contador = 0
        msgs = msgs[0].split()
        for emailid in msgs:
            resp, data = mail.fetch(emailid, "(RFC822)")
            email_body = data[0][1]
            m = email.message_from_bytes(email_body)
            if m.get_content_maintype() != 'multipart': continue

            for part in m.walk():
                if part.get_content_maintype() == 'multipart': continue
                if part.get('Content-Transfer-Encoding') is None: continue

                filename: str = part.get_filename()
                if filename is None: continue
                try:
                    filename = procesos_comunes.sender_decode(filename)
                except IndexError:
                    filename = part.get_filename()
                if filename is not None:
                    contador = contador + 1
                    sv_path = os.path.join(svdir, filename)
                    fp = open(sv_path, 'wb')
                    fp.write(part.get_payload(decode=True))
                    fp.close()
                    fichero_nombre, fichero_extension = os.path.splitext(
                        sv_path)
                    os.rename(
                        os.path.join(svdir,
                                     fichero_nombre + fichero_extension),
                        os.path.join(
                            svdir,
                            emailid.decode('UTF-8') +
                            fichero_extension.upper()))
                    print("Se ha descargado: {}".format(
                        emailid.decode('UTF-8') + fichero_extension.upper()))
        print("Total descargado {} documentos".format(str(contador)))

    except Exception as e:
        respuesta = {'resultado': 'KO', 'cantidad_correos': 0, 'error': e}
    finally:
        time.sleep(5)
        mail.close()
        mail.logout()
    return respuesta
Ejemplo n.º 2
0
def leer_mover_correos_completo_aceptaciones(vlista_pedidos, vhost, vuser,
                                             vpassword, vbuzon, vcriterio,
                                             vdestino, nominal_respaldo,
                                             codigos_proyecto,
                                             vcarpetas_trabajo):
    respuesta = {
        'resultado': 'OK',
        'cantidad_correos': 0,
        'error': '',
        'datos_consolidados': []
    }
    try:
        mail = imaplib.IMAP4_SSL(vhost, 993)
        mail.login(vuser, vpassword)
        typ, data = mail.select(vbuzon)
        if typ != 'OK':
            raise ValueError('No existe la carpeta {}'.format(vbuzon))
        num_msgs = int(data[0])
        print('Existen {} correos en INBOX'.format(num_msgs))

        # Filtrado por Subject
        typ, msgs = mail.search(None, vcriterio)
        print('Existen {} correos con el Subject indicado '.format(msgs[0]))

        # Descargado de adjuntos
        lconsolidado = []
        svdir = vcarpetas_trabajo['TempAceptacion']
        contador = 0
        cantidad_correos = 0
        msgs = msgs[0].split()
        for emailid in msgs:
            resp, data = mail.fetch(emailid, "(RFC822)")
            email_body = data[0][1]
            m = email.message_from_bytes(email_body)
            if m.get_content_maintype() != 'multipart': continue

            for part in m.walk():
                if part.get_content_maintype() == 'multipart': continue
                if part.get('Content-Transfer-Encoding') is None: continue

                filename: str = part.get_filename()
                if filename is None: continue
                try:
                    filename = procesos_comunes.sender_decode(filename)
                except IndexError:
                    filename = part.get_filename()
                if filename is not None:
                    contador = contador + 1
                    sv_path = os.path.join(svdir, filename)
                    fp = open(sv_path, 'wb')
                    fp.write(part.get_payload(decode=True))
                    fp.close()
                    fichero_nombre, fichero_extension = os.path.splitext(
                        sv_path)
                    os.rename(
                        os.path.join(svdir,
                                     fichero_nombre + fichero_extension),
                        os.path.join(
                            svdir, fichero_nombre + fichero_extension.upper()))
                    print("Se ha descargado: {}".format(
                        fichero_nombre + fichero_extension.upper()))
                    fichero_pdf = os.path.join(
                        svdir, fichero_nombre + fichero_extension.upper())

                    # Transformar el PDF
                    atexto = procesos_comunes.fichero_pdf_imagen_texto_oc(
                        PDF_file=fichero_pdf,
                        ficheros_respaldo=nominal_respaldo,
                        carpeta_trabajo=vcarpetas_trabajo['TempAceptacion'])

                    # Extrae datos
                    print("Extrayendo datos de coreo id :{}".format(emailid))
                    vaceptacion = procesos_comunes.extrae_los_datos_aceptacion(
                        atexto['Fichero_Texto'])
                    # Sólo se mueve si pertenece al listado de numero de pedido
                    pertenece = vaceptacion['N_Pedido'] in vlista_pedidos
                    if pertenece:
                        # Mover el mensaje
                        print('Moviendo correo {} con Nro Pedido {}'.format(
                            emailid, vaceptacion['N_Pedido']))
                        typ, response = mail.copy(emailid, vdestino)
                        if typ == 'OK':
                            typ, response = mail.store(emailid, '+FLAGS',
                                                       r'(\Deleted)')
                            cantidad_correos = cantidad_correos + 1
                            lconsolidado.append(vaceptacion)
                            # Mover y renombrar pdf
                            try:
                                procesos_comunes.pdf_renombra_mueve(
                                    fichero_pdf,
                                    vaceptacion['Acta_Aceptacion'] + '-' +
                                    vaceptacion['N_Pedido'],
                                    vcarpetas_trabajo['Aceptacion'])
                            except Exception as e1:
                                print(
                                    'No se ha podido mover el fichero {}, error {}'
                                    .format(fichero_pdf, e1))
                    else:
                        print(
                            'No se ha movido correo {} , porque no pertenece a BQA'
                            .format(emailid))

        #print("Total descargado {} documentos".format(str(contador)))
        respuesta['cantidad_correos'] = cantidad_correos
        respuesta['datos_consolidados'] = lconsolidado

    except Exception as e:
        respuesta = {'resultado': 'KO', 'cantidad_correos': 0, 'error': e}
    finally:
        time.sleep(5)
        mail.close()
        mail.logout()

    return respuesta
Ejemplo n.º 3
0
def leer_mover_correos(vhost, vuser, vpassword, vbuzon, vroot, vcriterio,
                       vdestino):
    respuesta = {'resultado': 'OK', 'cantidad_correos': 0, 'error': ''}
    try:
        mail = imaplib.IMAP4_SSL(vhost, 993)
        mail.login(vuser, vpassword)
        typ, data = mail.select(vbuzon)
        if typ != 'OK':
            raise ValueError('No existe la carpeta {}'.format(vbuzon))
        num_msgs = int(data[0])
        print('Existen {} correos en INBOX'.format(num_msgs))

        # Crear la carpeta
        carpeta_file = 'TempCompras'
        procesos_comunes.elimina_carpeta(vroot, carpeta_file)
        procesos_comunes.crea_carpeta(vroot, carpeta_file)
        svdir = os.path.join(vroot, carpeta_file)

        # Filtrado por Subject
        typ, msgs = mail.search(None, vcriterio)
        print('Existen {} correos con el Subject indicado '.format(msgs[0]))

        # Descargado de adjuntos
        contador = 0
        msgs = msgs[0].split()
        for emailid in msgs:
            resp, data = mail.fetch(emailid, "(RFC822)")
            email_body = data[0][1]
            m = email.message_from_bytes(email_body)
            if m.get_content_maintype() != 'multipart': continue

            for part in m.walk():
                if part.get_content_maintype() == 'multipart': continue
                if part.get('Content-Transfer-Encoding') is None: continue

                filename: str = part.get_filename()
                if filename is None: continue
                try:
                    filename = procesos_comunes.sender_decode(filename)
                except IndexError:
                    filename = part.get_filename()
                if filename is not None:
                    contador = contador + 1
                    sv_path = os.path.join(svdir, filename)
                    fp = open(sv_path, 'wb')
                    fp.write(part.get_payload(decode=True))
                    fp.close()
                    fichero_nombre, fichero_extension = os.path.splitext(
                        sv_path)
                    os.rename(
                        os.path.join(svdir,
                                     fichero_nombre + fichero_extension),
                        os.path.join(
                            svdir, fichero_nombre + str(contador) +
                            fichero_extension.upper()))
                    '''
                    if not os.path.isfile(sv_path):
                        fp = open(sv_path, 'wb')
                        fp.write(part.get_payload(decode=True))
                        fp.close()
                        #cambiar de nombre al fichero PDF
                        fichero_nombre, fichero_extension = os.path.splitext(sv_path)
                        os.rename(os.path.join(svdir, fichero_nombre + fichero_extension), os.path.join(svdir,
                                fichero_nombre + str(contador) + fichero_extension))
                    '''
        # Mover el mensaje
        for emailid in msgs:
            print('Moviendo:', emailid)
            # result = mail.uid('COPY', emailid, 'Compras')
            typ, response = mail.copy(emailid, vdestino)
            if typ == 'OK':
                # What are the current flags?
                # typ, response = mail.fetch(emailid, '(FLAGS)')
                # print('Flags before:', response)
                typ, response = mail.store(emailid, '+FLAGS', r'(\Deleted)')
                # typ, response = mail.fetch(emailid, '(FLAGS)')
                # print('Flags after:', response)
                # Really delete the message.
                # typ, response = mail.expunge()
                # print('Expunged:', response)

        mail.close()
        mail.logout()

    except Exception as e:
        respuesta = {'resultado': 'KO', 'cantidad_correos': 0, 'error': e}
    # finally:
    # Eliminar carpeta
    # elimina_carpeta(vroot, carpeta_file)
    return respuesta