import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import pyodbc import json import datetime # Cargar la información de conexión desde el archivo JSON with open('config.json', 'r') as config_file: config = json.load(config_file) # Crear una cadena de conexión usando la información del archivo JSON (en este momento esta la conexion a DB local) conn_str = ( f"DRIVER=ODBC Driver 17 for SQL Server;" f"SERVER={config['server']};" f"DATABASE={config['database']};" f"UID={config['username']};" f"PWD={config['password']};" ) # Conectar a la base de datos conn = pyodbc.connect(conn_str) try: cursor = conn.cursor() print('Conexion exitosa ala DB. ') fecha = '2023-10-02' # Ejemplo de fecha cursor.execute("{CALL NotiVigenciaDoda(?)}", fecha) # Recuperar los resultados del procedimiento almacenado rows = cursor.fetchall() factura_data = {} # Iterar a través de los resultados y agruparlos por factura for row in rows: invoice = row.Invoice if invoice not in factura_data: factura_data[invoice] = [] factura_data[invoice].append(row) # Crear un diccionario para almacenar los correos de CorreosResponsables, NotificacionAA y CorreosTipoViaje por factura correos_por_factura = {} # Iterar a través de los resultados y agrupar los correos por factura for row in rows: invoice = row.Invoice if invoice not in correos_por_factura: correos_por_factura[invoice] = {'CorreosResponsables': [], 'NotificacionAA': [], 'CorreoTipoViaje': []} # Preguntar al usuario por los correos para esta factura correos_responsables = input(f'Correos Responsables para la factura {invoice}: ').split(',') notificacion_aa = input(f'Correos NotificacionAA para la factura {invoice}: ').split(',') correos_tipo_viaje = input(f'Correos CorreoTipoViaje para la factura {invoice}: ').split(',') correos_por_factura[invoice]['CorreosResponsables'].extend(correos_responsables) correos_por_factura[invoice]['NotificacionAA'].extend(notificacion_aa) correos_por_factura[invoice]['CorreoTipoViaje'].extend(correos_tipo_viaje) # Configurar el servidor de correo electrónico saliente (SMTP) desde el archivo JSON with open('config.json', 'r') as email_config_file: email_config = json.load(email_config_file) smtp_server = email_config['EmailServer'] smtp_port = email_config['EmailPort'] # Tus credenciales de correo electrónico desde el archivo JSON sender_email = email_config['EmailUser'] sender_password = email_config['EmailPassword'] # Iterar a través de las facturas y enviar correos personalizados for invoice, correos_en_factura in correos_por_factura.items(): correos_responsables = correos_en_factura['CorreosResponsables'] notificacion_aa = correos_en_factura['NotificacionAA'] correos_tipo_viaje = correos_en_factura['CorreoTipoViaje'] # Obtener los datos comunes para la factura (fecha, invoice, caja, vigenciaDoda, notificacion) first_row = factura_data[invoice][0] # fechaActual = first_row.FechaActual caja = first_row.Caja vigenciaDoda = first_row.VigenciaDODA notificacion = first_row.Notificacion # Crear el mensaje de correo electrónico msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = ', '.join(correos_responsables + notificacion_aa + correos_tipo_viaje) # Agregar destinatarios al campo "Para" msg['Subject'] = f"Notificacion Vigencia de documentos. {invoice}" # Crear el cuerpo del mensaje con los datos de la factura en una tabla message = f"" message += f"

Factura {invoice}

" message += f"" message += f"" message += f"
InvoiceCajaVigenciaDODANotificacion
{invoice}{caja}{vigenciaDoda}{notificacion}

" message += "" msg.attach(MIMEText(message, 'html')) try: # Establecer la conexión al servidor SMTP server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() server.login(sender_email, sender_password) # Enviar el correo con los destinatarios en el campo "Para" server.sendmail(sender_email, correos_responsables + notificacion_aa + correos_tipo_viaje, msg.as_string()) print(f"Correo enviado a CorreosResponsables, NotificacionAA y CorreosTipoViaje de factura {invoice}") # Cerrar la conexión SMTP server.quit() except Exception as e: print(f"Error al enviar correo de factura {invoice}: {e}") except Exception as e: print("Error al conectarse:", e)