83 lines
2.8 KiB
Python

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os
import pandas as pd
from datetime import datetime
from tqdm import tqdm
def determinar_periodo():
hora_actual = datetime.now().hour
if 6 <= hora_actual < 12:
return "Buen día"
elif 12 <= hora_actual < 18:
return "Buena tarde"
elif 18 <= hora_actual < 24:
return "Buena noche"
else:
return "Madrugada"
def build_message(saludo_hora, destinatarios, nombre_destinatario, file_path, email_usuario):
msg = MIMEMultipart()
msg["From"] = email_usuario
msg["To"] = ", ".join(destinatarios)
msg["Subject"] = "Respuesta a solicitud de conectividad"
cuerpo = (
f"{saludo_hora} {nombre_destinatario};\n\n"
"Por medio del presente se le hace llegar la respuesta a su solicitud de conectividad, "
"adjunto encontrará el documento en mención.\n\nSaludos cordiales."
)
msg.attach(MIMEText(cuerpo, "plain"))
if os.path.exists(file_path):
with open(file_path, "rb") as adj:
parte = MIMEBase("application", "octet-stream")
parte.set_payload(adj.read())
encoders.encode_base64(parte)
parte.add_header("Content-Disposition", f"attachment; filename={os.path.basename(file_path)}")
msg.attach(parte)
else:
print(f"⚠️ Archivo no encontrado: {file_path}, se envía sin adjunto.")
return msg
def main():
email_usuario = "david.itehua@aem.gob.mx"
app_password = "lcdq hwvq wxxa pbcn"
smtp_server = "smtp.gmail.com"
smtp_port = 465
# Carga de Excel
file_xlsx = "./Control Oficios Conectividad 2025 .xlsx"
df = pd.read_excel(file_xlsx)[["No", "FECHA DE RECEPCION", "REMITENTE", "ASUNTO", "CORREO ELECTRÓNICO", "FILE_TO_SEND"]]
saludo = determinar_periodo()
# Abrir UNA sola conexión
with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
server.login(email_usuario, app_password)
for _, row in tqdm(df.iterrows(), total=len(df), desc="Enviando correos"):
# Normaliza separadores
emails_raw = str(row["CORREO ELECTRÓNICO"])
destinatarios = [e.strip() for e in emails_raw.replace(";", ",").split(",") if e.strip()]
file_to_send = row["FILE_TO_SEND"]
msg = build_message(saludo, destinatarios, row["REMITENTE"], file_to_send, email_usuario)
try:
server.send_message(msg, from_addr=email_usuario, to_addrs=destinatarios)
# print(f"✅ Correo enviado a: {', '.join(destinatarios)}")
except Exception as e:
print(f"❌ Error enviando a {destinatarios}: {e}")
if __name__ == "__main__":
main()