diff --git a/seqsl.py b/seqsl.py index c575c6c..1af9d83 100644 --- a/seqsl.py +++ b/seqsl.py @@ -2,9 +2,9 @@ import os import argparse import logging -from qrzapi import consulta_email, get_api_key -from transform import extraer_campos, create_pdf -from gmail import send_email_with_attachment +from utils.qrzapi import consulta_email, get_api_key +from utils.transform import extraer_campos, create_pdf +from utils.gmail import send_email_with_attachment # Cargar la configuración desde config.ini config = configparser.ConfigParser() @@ -32,6 +32,11 @@ apikey = get_api_key(config['qrz']['username'], config['qrz']['password']) +# Inicializar contadores y lista de fallos +emails_enviados = 0 +emails_fallidos = 0 +callsign_fallidos = [] + if __name__ == "__main__": # Usar el archivo QSL especificado por el usuario image_path = args.qsl_file @@ -54,22 +59,44 @@ output_filename = os.path.join(output_folder, f"{safe_call_sign}.pdf") # Ruta completa del archivo create_pdf(output_filename, image_path, registro) qlsfile = output_folder + '/' + safe_call_sign + '.pdf' - subject = 'New SQL card from ' + config['qrz']['username'] + ' to ' + safe_call_sign - send_email_with_attachment( - config['gmail']['sender_email'], - email, - subject, - config['gmail']['mail_body'], - qlsfile, - config['gmail']['sender_password'], - config['gmail']['smtp_server'] - ) + subject = 'New QSL card from ' + config['qrz']['username'] + ' to ' + safe_call_sign + + try: + # Intentar enviar el email con adjunto + send_email_with_attachment( + config['gmail']['sender_email'], + email, + subject, + config['gmail']['mail_body'], + qlsfile, + config['gmail']['sender_password'], + config['gmail']['smtp_server'] + ) + emails_enviados += 1 # Incrementar el contador de emails enviados exitosamente + logging.info(f"Email enviado exitosamente a {safe_call_sign}.") + except Exception as e: + # En caso de fallo al enviar, actualizar el contador y la lista de fallos + emails_fallidos += 1 + callsign_fallidos.append(safe_call_sign) + logging.error(f"Error al enviar email a {safe_call_sign}: {e}") - # Eliminar el archivo PDF después de enviarlo + # Eliminar el archivo PDF después de enviarlo o al intentarlo try: os.remove(qlsfile) logging.info(f"Archivo {qlsfile} eliminado exitosamente.") except OSError as e: logging.error(f"Error al eliminar el archivo {qlsfile}: {e}") else: + # Si no se pudo obtener el email + emails_fallidos += 1 + callsign_fallidos.append(safe_call_sign) logging.warning(f"No se pudo obtener el email para el callsign {safe_call_sign}.") + + # Mostrar resumen de envíos al finalizar el proceso + logging.info("Resumen de envío de emails:") + logging.info(f"Emails enviados exitosamente: {emails_enviados}") + logging.info(f"Emails fallidos: {emails_fallidos}") + if callsign_fallidos: + logging.info("Lista de callsigns fallidos:") + for callsign in callsign_fallidos: + logging.info(f" - {callsign}") diff --git a/gmail.py b/utils/gmail.py similarity index 100% rename from gmail.py rename to utils/gmail.py diff --git a/qrzapi.py b/utils/qrzapi.py similarity index 100% rename from qrzapi.py rename to utils/qrzapi.py diff --git a/transform.py b/utils/transform.py similarity index 100% rename from transform.py rename to utils/transform.py