parent
d3de9a7c40
commit
e46aedb974
@ -0,0 +1,161 @@ |
||||
import smtplib |
||||
from email.mime.multipart import MIMEMultipart |
||||
from email.mime.base import MIMEBase |
||||
from email.mime.text import MIMEText |
||||
from email import encoders |
||||
import pyodbc |
||||
import pandas as pd |
||||
import json |
||||
import datetime |
||||
import os |
||||
|
||||
# Obtiene la ruta del directorio donde se encuentra el script |
||||
directorio_script = os.path.dirname(os.path.abspath(__file__)) |
||||
|
||||
# Establece el directorio de trabajo actual |
||||
os.chdir(directorio_script) |
||||
|
||||
# Cargar la configuración del correo electrónico desde el archivo JSON |
||||
with open('config.json', 'r') as config_file: |
||||
config = json.load(config_file) |
||||
|
||||
smtp_server = config['EmailServer'] |
||||
smtp_port = config['EmailPort'] |
||||
|
||||
# Tus credenciales de correo electrónico desde el archivo JSON |
||||
sender_email = config['EmailUser'] |
||||
sender_password = config['EmailPassword'] |
||||
|
||||
# Obtener las fechas de los últimos dos meses |
||||
today = datetime.date.today() |
||||
last_month = today.replace(day=1) - datetime.timedelta(days=1) |
||||
two_months_ago = last_month.replace(day=1) - datetime.timedelta(days=1) |
||||
|
||||
# Convertir las fechas a formato de cadena YYYY-MM-DD |
||||
start_date = two_months_ago.replace(day=1).strftime("%Y-%m-%d") |
||||
end_date = last_month.strftime("%Y-%m-%d") |
||||
cliente = 1725; |
||||
tipoOperacion = 2 |
||||
|
||||
# Obtener el nombre de los últimos dos meses en español |
||||
mes = last_month.strftime("%B").capitalize() |
||||
mes_anterior = two_months_ago.strftime("%B").capitalize() |
||||
|
||||
# Cargar la configuración de la base de datos desde el archivo JSON |
||||
with open('config.json', 'r') as config_file: |
||||
config = json.load(config_file) |
||||
|
||||
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() |
||||
|
||||
# Ejecutar la consulta SQL para obtener los correos electrónicos de la tabla |
||||
cursor.execute("select * from [Clientes.Reporte.Notificaciones] where Id = 1 or Id = 5 or TipoReporte = 'RptFacturasCruzadas' ") |
||||
rows = cursor.fetchall() |
||||
|
||||
# Obtener una lista de correos electrónicos |
||||
recipients = [row.CorreoElectronico for row in rows] |
||||
|
||||
# Ejecutar el primer procedimiento almacenado y guardar los resultados en un DataFrame |
||||
cursor.execute("{CALL [Reportes.Web.Clientes.Facturas.Cruzadas] (?, ?, ?,?)}", (start_date, end_date, tipoOperacion, cliente)) |
||||
# cursor.execute("{CALL [Reportes.Web.Clientes.Factura.Pedimentos.Pagados.Get] (?,?,?,?)}", (start_date, end_date, tipoOperacion, cliente)) |
||||
rows = cursor.fetchall() |
||||
df1 = pd.DataFrame([tuple(row) for row in rows], columns=[desc[0] for desc in cursor.description]) |
||||
|
||||
# Guardar el DataFrame en un archivo Excel con el mes en el nombre del archivo |
||||
excel_file_1 = f'ReporteMensualFacturasCruzadas_{mes_anterior}_{mes}.xlsx' |
||||
df1.to_excel(excel_file_1, index=False) |
||||
|
||||
|
||||
# Configurar el correo electrónico |
||||
msg = MIMEMultipart() |
||||
msg['From'] = sender_email |
||||
msg['To'] = ', '.join(recipients) # Lista de destinatarios separados por comas |
||||
msg['Subject'] = f'Reportes Mensuales GEMCO - {mes_anterior} - {mes}' |
||||
# Agregar el cuerpo del mensaje |
||||
# body = """ Se anexan reportes mensual de segregados y reporte de factura pagadas correspodientes al mes inmediato anterior. |
||||
# En caso de dudas o aclaraciones conctactar a Viviana Jara: (vjara@gemcousa.com) o Susana Sánchez: (ssanchez@gemcousa.com) |
||||
|
||||
# Saludos. """ |
||||
|
||||
body ="""Se anexan reporte mensual de Facturas Cruzadas correspodientes a los 2 meses inmediatos anteriores ({mes_anterior} and {mes}). |
||||
En caso de dudas o aclaraciones conctactar a : (jguel@gemcousa.com) |
||||
|
||||
Saludos. """.format(mes=mes, mes_anterior=mes_anterior) |
||||
centered_body = body.strip().center(70) |
||||
msg.attach(MIMEText(body, 'plain')) |
||||
|
||||
# Adjuntar los archivos Excel al correo electrónico |
||||
for excel_file in [excel_file_1]: |
||||
with open(excel_file, 'rb') as attachment: |
||||
part = MIMEBase('application', 'octet-stream') |
||||
part.set_payload(attachment.read()) |
||||
encoders.encode_base64(part) |
||||
part.add_header('Content-Disposition', f'attachment; filename= {excel_file}') |
||||
msg.attach(part) |
||||
|
||||
# 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 |
||||
server.sendmail(sender_email, recipients, msg.as_string()) |
||||
print("Reportes mensual enviado exitosamente por correo electrónico.") |
||||
|
||||
# Eliminar los archivos Excel después de enviar el correo electrónico |
||||
for excel_file in [excel_file_1]: |
||||
os.remove(excel_file) |
||||
|
||||
except Exception as e: |
||||
print(f"Error al enviar los reportes mensuales por correo: {e}") |
||||
|
||||
finally: |
||||
# Cerrar la conexión SMTP y la conexión con la base de datos |
||||
if 'server' in locals(): |
||||
server.quit() |
||||
conn.close() |
||||
|
||||
# Credenciales producion |
||||
#{ |
||||
# "server": "100.10.10.1", |
||||
# "database": "GEMCO", |
||||
# "username": "admin", |
||||
# "password": "DBAdmin1234$.", |
||||
# "EmailUser": "noreply@gemcousa.mx", |
||||
# "EmailPassword": "Mx77lf%02", |
||||
# "EmailServer": "smtp.ionos.com", |
||||
# "EmailPort": 587, |
||||
# "recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"] |
||||
# } |
||||
|
||||
|
||||
# { credenciales maquina local |
||||
# "server": ".", |
||||
# "database": "GEMCO", |
||||
# "username": "sa", |
||||
# "password": "Chispa10", |
||||
# "EmailUser": "noreply@gemcousa.mx", |
||||
# "EmailPassword": "Mx77lf%02", |
||||
# "EmailServer": "smtp.ionos.com", |
||||
# "EmailPort": 587, |
||||
# "recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"] |
||||
# } |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,13 @@ |
||||
{ |
||||
"server": ".", |
||||
"database": "GEMCO", |
||||
"username": "sa", |
||||
"password": "Chispa10", |
||||
"EmailUser": "noreply@gemcousa.mx", |
||||
"EmailPassword": "Mx77lf%02", |
||||
"EmailServer": "smtp.ionos.com", |
||||
"EmailPort": 587, |
||||
"recipients": ["lrendon@gemcousa.com", "destinatario2@example.com", "destinatario3@example.com"] |
||||
} |
||||
|
||||
|
Loading…
Reference in new issue