You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
9.8 KiB
235 lines
9.8 KiB
1 year ago
|
# 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-18' # 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': []}
|
||
|
|
||
|
# # 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
|
||
|
|
||
|
# # 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']
|
||
|
|
||
|
# # 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"<html><body>"
|
||
|
# message += f"<h2>Factura {invoice}</h2>"
|
||
|
# message += f"<table border='1'><tr><th>Fecha Actual</th><th>Invoice</th><th>Caja</th><th>VigenciaDODA</th><th>Notificacion</th></tr>"
|
||
|
# message += f"<tr><td>{fechaActual}</td><td>{invoice}</td><td>{caja}</td><td>{vigenciaDoda}</td><td>{notificacion}</td></tr>"
|
||
|
# message += f"</table><br>"
|
||
|
# message += "</body></html>"
|
||
|
# 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)
|
||
|
|
||
|
|
||
|
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"<html><body>"
|
||
|
message += f"<h2>Factura {invoice}</h2>"
|
||
|
message += f"<table border='1'><tr><th>Invoice</th><th>Caja</th><th>VigenciaDODA</th><th>Notificacion</th></tr>"
|
||
|
message += f"<tr><td>{invoice}</td><td>{caja}</td><td>{vigenciaDoda}</td><td>{notificacion}</td></tr>"
|
||
|
message += f"</table><br>"
|
||
|
message += "</body></html>"
|
||
|
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)
|
||
|
|
||
|
|
||
|
|