12 Días de DigitalOcean (Día 12) – Enviando correos de confirmación con reenvío

¡Bienvenido al último día de nuestra serie 12 Días de DigitalOcean! Hemos recorrido un largo camino, construyendo un Servicio de Procesamiento de Recibos Basado en Correo Electrónico que extrae detalles de recibos de Postmark utilizando el Agente GenAI de DigitalOcean, almacena de forma segura los archivos adjuntos en Espacios de DigitalOcean, y guarda los datos extraídos en Google Sheets.

Hoy, añadiremos el toque final: enviar correos electrónicos de confirmación al remitente con los detalles del recibo, enlaces a los archivos adjuntos y un enlace a la Hoja de Cálculo de Google. Este último paso une todo, asegurando que los usuarios reciban comentarios inmediatos de que sus recibos han sido procesados con éxito.

🚀 Lo que Aprenderás

Al final de este tutorial, sabrás cómo:

  1. Utilizar la API de Reenvío para enviar correos electrónicos de confirmación de forma programática.
  2. Administrar de forma segura credenciales sensibles utilizando variables de entorno.
  3. Formatear y enviar correos electrónicos transaccionales con detalles del recibo, enlaces de adjuntos y URL de hojas de cálculo.
  4. Probar y solucionar problemas en un flujo de trabajo completo de procesamiento de correos electrónicos.

🛠 Lo que necesitarás

Si deseas seguir construyendo, asumimos que has seguido el Día 11: Guardar datos del recibo y adjuntos en Google Sheets y ya tienes:

Si solo estás interesado en aprender cómo integrar Resend para enviar correos electrónicos de confirmación, necesitarás:

  • Una cuenta de Resend: Regístrate en Resend.
  • Una clave API: Genérala desde tu panel de Resend.

Paso 1: Crea una cuenta en Resend y obtén la clave API

Para enviar correos electrónicos de forma programática, utilizaremos Resend, una API amigable para desarrolladores que permite enviar correos electrónicos transaccionales. Simplifica el envío de correos electrónicos para que no tengas que lidiar con la configuración de un servidor de correo electrónico, gestionar configuraciones SMTP o preocuparte por los filtros de spam.

  1. Primero, ve a Resend y regístrate para obtener una cuenta gratuita. Una vez iniciado sesión, ve a la sección de Claves API del panel de control y genera una nueva clave API.

  2. Dale a tu clave API un nombre descriptivo, como Aplicación Procesadora de Recibos, y establece su permiso en Acceso Completo.

  3. Copiar la clave de API: Tu clave de API se mostrará solo una vez, cópiala y guárdala de forma segura. La necesitarás en el próximo paso para autenticar tu aplicación con Resend.

Paso 2: Actualizar tus variables de entorno

Ahora que tenemos la clave de API de Resend, vamos a guardarla como una variable de entorno en DigitalOcean, tal como hemos estado haciendo a lo largo de esta serie.

Para la integración de Resend, necesitamos guardar dos variables de entorno:

  • RESEND_API_KEY: La clave de API que generaste en el Paso 1, la cual autentica tu aplicación con Resend.
  • RESEND_EMAIL_FROM: La dirección de correo electrónico del remitente que utilizarás para enviar correos de confirmación. Esta debe ser una dirección verificada en tu cuenta de Resend.

Para añadir estas variables, sigue estos pasos:

  1. Dirígete a tu panel de control de DigitalOcean App Platform, encuentra tu aplicación Flask y navega a la pestaña de Configuración. Bajo Variables de entorno, agrega las dos variables:
    • Clave: RESEND_API_KEY

      • Valor: Pega la clave API que generaste en el Paso 1.
    • Clave: RESEND_EMAIL_FROM

      • Valor: Ingresa una dirección de correo electrónico verificada del remitente de tu cuenta de Resend.
  2. Guarda tus cambios para hacer que la clave API de Resend esté disponible para tu aplicación Flask, que actualizaremos a continuación.

Paso 3: Instalar la biblioteca Resend Python

A continuación, instalaremos la biblioteca Resend Python para manejar la API por nosotros. Mantiene tu código limpio y evita tener que lidiar con solicitudes HTTP en bruto. Ejecuta esto en tu terminal:

pip install resend

Paso 4: Actualizar requirements.txt

En lugar de editar requirements.txt manualmente, utiliza pip freeze para listar todas las dependencias instaladas con versiones exactas. Ejecuta esto:

pip freeze > requirements.txt

Esto actualiza requirements.txt con todo lo que tu aplicación necesita, incluido resend.

Paso 5: Escribir la función para enviar correos electrónicos

Ahora es el momento de añadir la lógica para enviar correos electrónicos de confirmación. Piensa en ello como enviar un correo electrónico a un amigo para hacerle saber que su paquete ha llegado, solo que aquí, es para recibos.

Vamos a escribir una función send_confirmation_email que tome el correo del destinatario, los detalles del recibo, los enlaces de los archivos adjuntos y la URL de la Hoja de cálculo de Google. Utilizando Resend, formateará esto en un correo electrónico y lo enviará. Aquí está la función:

def send_confirmation_email(to_email, receipt_data, attachment_urls, spreadsheet_url):
    """
    Send a confirmation email with receipt details and attachment URLs.
    """
    email_from = os.getenv('RESEND_EMAIL_FROM')  # Establece esto en tus variables de entorno
    subject = "Receipt Processed Successfully"
    email_body = f"""
    <h1>Receipt Confirmation</h1>
    <p>Your receipt has been successfully processed. Here are the details:</p>
    <ul>
        <li><strong>Vendor:</strong> {receipt_data.get('vendor', 'N/A')}</li>
        <li><strong>Amount:</strong> {receipt_data.get('amount', 'N/A')}</li>
        <li><strong>Currency:</strong> {receipt_data.get('currency', 'N/A')}</li>
        <li><strong>Date:</strong> {receipt_data.get('date', 'N/A')}</li>
    </ul>
    <p><strong>Attachments:</strong></p>
    <ul>
        {''.join(f'<li><a href="{url["url"]}">{url["file_name"]}</a></li>' for url in attachment_urls)}
    </ul>
    <p>You can view the processed data in the spreadsheet: <a href="{spreadsheet_url}">Google Spreadsheet</a></p>
    """
    try:
        resend.Emails.send({
            "from": email_from,
            "to": to_email,
            "subject": subject,
            "html": email_body
        })
        logging.info(f"Confirmation email sent to {to_email}.")
    except Exception as e:
        logging.error(f"Failed to send confirmation email: {e}")

Paso 5: Implementar en DigitalOcean

Para implementar la aplicación Flask actualizada, sigue los pasos de Día 7: Construcción e Implementación del Procesador de Recibos Basado en Correo Electrónico. Aquí tienes un resumen rápido:

  1. Sube tu Código Actualizado a GitHub: Después de hacer los cambios necesarios en tu aplicación Flask, haz commit y sube el código actualizado a GitHub. Esto desencadenará una implementación automática en la Plataforma de Aplicaciones de DigitalOcean.

    git add .
    git commit -m "Agregar integración de Resend para correos de confirmación"
    git push origin main
    
  2. Monitorear el despliegue: Puedes seguir el progreso en la sección de Despliegues del panel de tu aplicación.

  3. Verificar tu despliegue: Después de que el despliegue se complete, navega hacia la URL pública de tu aplicación y prueba su funcionalidad. También puedes revisar los registros de tiempo de ejecución en el panel para confirmar que la aplicación inició correctamente.

  4. Revisar los registros de tiempo de ejecución: Si algo no funciona como se espera, utiliza la pestaña de Registros de Tiempo de Ejecución en el panel de la Plataforma de Aplicaciones para depurar problemas de tiempo de ejecución. Busca cualquier error relacionado con la API de Reenvío u otros componentes de la aplicación.

Paso 5: Probar todo el flujo de trabajo

Ahora que tu aplicación está completamente configurada y lista, es momento de probar todo el flujo de trabajo. Nos aseguraremos de que el cuerpo del correo electrónico sea procesado, los adjuntos sean decodificados y subidos a DigitalOcean Spaces, los detalles del recibo y las URL de los adjuntos sean guardados en Google Sheets, y que se envíe un correo electrónico de confirmación al remitente.

Así es como puedes probar paso a paso:

  1. Enviar un correo electrónico de prueba: Envía un correo electrónico a Postmark con un cuerpo de texto y un adjunto. Si no estás seguro de cómo configurar Postmark, revisa el Día 8: Conectar Postmark a tu Aplicación Flask, donde explicamos cómo configurar Postmark para reenviar correos electrónicos a tu aplicación.

  2. Verificar JSON de actividad de Postmark: En el panel de Postmark, vaya a la pestaña Actividad. Localice el correo electrónico que envió y asegúrese de que la carga útil JSON incluya el cuerpo de texto y los datos adjuntos codificados en Base64. Esto confirma que Postmark está reenviando correctamente los datos del correo electrónico a su aplicación, tal como configuramos en el Día 8.

  3. Monitorear los registros: Verifique los registros de tiempo de ejecución en el panel de control de la Plataforma de la aplicación de DigitalOcean para asegurarse de que la aplicación procese la carga JSON. Debería ver registros que muestren que los detalles del recibo fueron extraídos y que los archivos adjuntos fueron cargados en DigitalOcean Spaces. Puede acceder a los registros de tiempo de ejecución en la pestaña Registros del panel de control de la Plataforma de la aplicación de DigitalOcean. Si no está familiarizado con los registros de DigitalOcean, exploramos esto durante el Día 9: Automatización del Análisis de Recibos con el Agente GenAI de DigitalOcean.

  4. Verificar la carga en Espacios: Visita tu Espacio de DigitalOcean para confirmar que los archivos se hayan subido correctamente. Deberías ver los adjuntos en tu depósito tal como se configuró en el Día 10: Almacenar Adjuntos en Espacios de DigitalOcean. Si todo salió como se esperaba, tus URLs de adjuntos serán accesibles.

  5. Verificar Google Sheets: Abre tu Hoja de Cálculo de Google y confirma que se haya añadido una nueva fila con detalles del recibo y URLs de adjuntos, tal como lo configuramos en el Día 11: Guardar Detalles de Recibos en Google Sheets. La fila debería incluir:

    • Vendedor, monto, divisa y fecha extraídos del cuerpo del correo electrónico.
    • URLs separadas por comas de los adjuntos subidos en la última columna.

  6. Verificar el Correo de Confirmación: Finalmente, revisa la bandeja de entrada de la dirección de correo electrónico del remitente para asegurarte de que se recibió el correo de confirmación. Este correo debería contener:

    • Los detalles del recibo extraídos (proveedor, monto, divisa y fecha).
    • Enlaces a los archivos adjuntos subidos en DigitalOcean Spaces.
    • Un enlace a la Hoja de Cálculo de Google donde se registran los datos del recibo.

Resolución de problemas

Si el flujo de trabajo no funciona como se espera, aquí hay algunos pasos de resolución de problemas a seguir:

  1. Comprueba el Panel de reenvío de correos electrónicos en busca de errores: Visita el panel de reenvío para ver si ocurrieron errores al enviar el correo de confirmación.

  2. Verifica las variables de entorno: Asegúrate de que la clave de API (RESEND_API_KEY) y el correo del remitente (RESEND_EMAIL_FROM) estén configurados correctamente en las variables de entorno en el panel de la plataforma de aplicaciones de DigitalOcean.

  3. Inspecciona los registros de ejecución de DigitalOcean: Abre la pestaña de Registros de ejecución en el panel de la plataforma de aplicaciones de DigitalOcean para buscar errores al procesar el correo electrónico o subir archivos adjuntos. Estos registros pueden proporcionar información útil, especialmente para las interacciones con Postmark o Resend.

  4. Revisar la actividad de Postmark: En la pestaña de Actividad de Postmark, confirma que el correo electrónico de prueba se haya enviado correctamente a tu aplicación Flask. Si hay problemas, Postmark mostrará errores relacionados con el reenvío o problemas de configuración.

🎁 Conclusión

¡Felicidades! Has completado con éxito la serie 12 Días de DigitalOcean y has construido un Servicio de Procesamiento de Recibos Basado en Correo Electrónico completamente funcional.

Hoy:

  • Integraste la API de Resend para enviar correos electrónicos transaccionales.
  • Configuraste variables de entorno para gestionar de forma segura credenciales sensibles.
  • Enviaste correos electrónicos de confirmación con detalles del recibo, enlaces de archivos adjuntos y una URL de hoja de cálculo.
  • Probaste el flujo completo desde el envío del correo electrónico hasta la confirmación final.

Al agregar correos de confirmación, has concluido un proyecto que procesa correos electrónicos, extrae detalles, almacena adjuntos y mantiene todo organizado en Google Sheets. Es amigable para el usuario, práctico y está listo para resolver problemas del mundo real.

📚 Los 12 Días de DigitalOcean

Este marca el final de la serie 12 Días de DigitalOcean. En los últimos 12 días, hemos construido dos aplicaciones del mundo real, paso a paso. En el camino, has utilizado herramientas como las Funciones sin servidor, Plataforma de aplicaciones, Almacenamiento de objetos Spaces, PostgreSQL, GenAI de DigitalOcean, Twilio, API de Google Sheets, Postmark, PaperTrail y Resend. Cada pieza se unió para formar algo más grande que la suma de sus partes.

Aquí tienes un breve resumen de lo que has construido:

🎂 Días 1-6: Construir un Servicio de Recordatorio de Cumpleaños

Esta aplicación rastrea cumpleaños y envía recordatorios por SMS automáticamente. Es ligera, sin servidor y fácil de mantener.

Para el Día 6, tendrá un servicio totalmente automatizado funcionando en la nube. Simplemente funciona.

📧 Días 7–12: Construir un Procesador de Recibos por Correo Electrónico

Esta aplicación maneja recibos enviados por correo electrónico, extrae los detalles necesarios y organiza todo en una base de datos.

Para el Día 12, has construido una herramienta completa que maneja recibos de principio a fin.

Lo que has aprendido

  1. Almacenamiento y gestión de datos: Utilizaste PostgreSQL para el almacenamiento de datos estructurados y Google Sheets para el registro de datos fácil y compartible.
  2. Automatización de flujos de trabajo: Con las Funciones de DigitalOcean y disparadores de programación, automatizaste procesos y lograste que tus aplicaciones funcionen como un reloj.
  3. Agregando inteligencia a tus aplicaciones: Al integrar GenAI de DigitalOcean, incorporaste extracción y organización inteligente de datos en tus flujos de trabajo, haciendo que tus aplicaciones sean más inteligentes y capaces.
  4. Manejo seguro de archivos: Trabajaste con Spaces de DigitalOcean para almacenar y gestionar archivos de manera confiable y escalable.
  5. Mejorando aplicaciones con APIs: APIs como Twilio, Postmark y Resend aportaron funcionalidades como notificaciones por SMS, reenvío de correos electrónicos y correos de confirmación a tus aplicaciones.
  6. Depuración y Monitoreo: Utilizando herramientas como Papertrail, aprendiste a depurar y monitorear tus aplicaciones de manera efectiva, manteniéndolas funcionando sin problemas.

¿Qué sigue?

Esto es solo el comienzo, lo que has aprendido aquí se puede aplicar a innumerables otros proyectos. Aquí tienes algunas formas de seguir adelante:

  • Únete a la conversación en Discord de DigitalOcean para conectarte con otros desarrolladores, compartir lo que has construido y sentirte inspirado.
  • Explora más en nuestra biblioteca de tutoriales para obtener más ideas y proyectos.

Si sigues adelante, me encantaría ver lo que creas, ¡siéntete libre de compartir tu progreso o retroalimentación conmigo en Twitter.

Mantente simple. Construye algo útil. ¡Feliz creación! 🚀

Source:
https://www.digitalocean.com/community/tutorials/sending-confirmation-emails-with-resend