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() # fecha = '2023-09-13' # Ejemplo de fecha fecha = datetime.date.today() cursor.execute("{CALL NotiVigenciaDoda(?)}", fecha) # Recuperar los resultados del procedimiento almacenado rows = cursor.fetchall() # 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'] 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': []} correos_responsables = row.CorreosResponsables.split(',') if row.CorreosResponsables else [] notificacion_aa = row.NotificacionAA.split(',') if row.NotificacionAA else [] correos_tipo_viaje = row.CorreoTipoViaje.split(',') if row.CorreoTipoViaje else [] 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) 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"Información de factura {invoice}" # Crear el cuerpo del mensaje con los datos de la factura en una tabla message = f"
" message += f"Fecha Actual | Invoice | Caja | VigenciaDODA | Notificacion |
---|---|---|---|---|
{fechaActual} | {invoice} | {caja} | {vigenciaDoda} | {notificacion} |