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
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
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