import smtplib
import ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def enviar_correo_ses_python():
    print("--- Iniciando el proceso de envío de correo ---")

    # Configuración del servidor SMTP de AWS SES
    smtp_server = "email-smtp.us-east-1.amazonaws.com"
    smtp_port = 587  # Puerto para STARTTLS (también puedes probar 25 o 2525)

    # Credenciales SMTP de AWS SES (¡REEMPLAZA CON TUS CREDENCIALES REALES!)
    # Estas son las credenciales SMTP que generas en AWS IAM para SES,
    # NO las credenciales generales de tu cuenta AWS.
    sender_email_username = "AKIA6G75D6MWFVNL46R4" # Ejemplo: AKIAIOSFODNN7EXAMPLE
    sender_email_password = "BFH5ZF6nMts5XoavACnmhXPRH7tAKkwM286YOqy0WCwg" # Ejemplo: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

    # Direcciones de correo (¡REEMPLAZA CON LAS DIRECCIONES REALES!)
    sender_email = "gps@divisiongps.com.ar" # Tu dirección de correo verificada en SES
    receiver_email = "gps@divisiongps.com.ar" # La dirección del destinatario

    # Crear el mensaje
    message = MIMEMultipart("alternative")
    message["Subject"] = "Hola Mundo desde Python con AWS SES"
    message["From"] = sender_email
    message["To"] = receiver_email

    text_content = "Este es un correo de prueba enviado desde Python usando AWS SES."
    html_content = """\
    <html>
      <body>
        <p>Hola Mundo,<br>
           Este es un correo de prueba enviado desde <b>Python</b><br>
           usando <b>AWS SES</b>.<br>
           ¡Esperamos que funcione!
        </p>
      </body>
    </html>
    """

    part1 = MIMEText(text_content, "plain")
    part2 = MIMEText(html_content, "html")

    message.attach(part1)
    message.attach(part2)

    # Contexto SSL seguro (para STARTTLS)
    context = ssl.create_default_context()

    try:
        print(f"Paso 1: Conectando al servidor SMTP {smtp_server} en el puerto {smtp_port}...")
        # Usa smtplib.SMTP para STARTTLS (puertos 587, 25, 2525)
        with smtplib.SMTP(smtp_server, smtp_port) as server:
            print("Paso 2: Conexión establecida. Iniciando STARTTLS...")
            server.ehlo()  # Identificarse ante el servidor
            server.starttls(context=context) # Iniciar la capa de cifrado TLS
            server.ehlo()  # Re-identificarse después de STARTTLS

            print("Paso 3: Iniciando sesión en el servidor SMTP...")
            server.login(sender_email_username, sender_email_password)

            print(f"Paso 4: Enviando correo de '{sender_email}' a '{receiver_email}'...")
            server.sendmail(sender_email, receiver_email, message.as_string())

            print("Paso 5: Correo enviado exitosamente.")

    except smtplib.SMTPAuthenticationError as e:
        print(f"\n¡ERROR! Fallo de autenticación SMTP. Por favor, verifica tu USUARIO y CONTRASEÑA SMTP de SES.")
        print(f"Detalles del error: {e}")
    except smtplib.SMTPConnectError as e:
        print(f"\n¡ERROR! No se pudo conectar al servidor SMTP. Revisa la dirección del host y el puerto.")
        print(f"Detalles del error: {e}")
    except smtplib.SMTPException as e:
        print(f"\n¡ERROR! Ocurrió un error SMTP inesperado.")
        print(f"Detalles del error: {e}")
    except ssl.SSLError as e:
        print(f"\n¡ERROR! Problema con la conexión SSL/TLS. Esto puede ser por versión de protocolo o certificado.")
        print(f"Detalles del error: {e}")
    except Exception as e:
        print(f"\n¡ERROR! Ocurrió un error inesperado durante el envío del correo.")
        print(f"Detalles del error: {e}")
    finally:
        print("--- Proceso de envío de correo finalizado ---")

# Llamar a la función para ejecutar el envío
if __name__ == "__main__":
    enviar_correo_ses_python()