Envío de correos electrónicos desde aplicaciones Python Flask con Twilio SendGrid

Publicado: 2020-06-30

Determinar si construir o comprar su infraestructura de correo electrónico no es una decisión fácil. ¿Tiene el ancho de banda para soportar los problemas de capacidad de entrega? ¿Serás capaz de mantenerte al día con tus envíos a medida que crezcas? ¿Qué es más rentable? Si bien hay una serie de factores a considerar, esa es una conversación para otra guía (como esta guía Constrúyalo o Cómprelo ).

En su lugar, este tutorial le mostrará lo fácil que es enviar un correo electrónico a través de un servicio de correo electrónico dedicado. Veremos cómo enviar correos electrónicos a través de Twilio SendGrid usando el marco Flask y la extensión Flask-Mail .

Herramientas tutoriales

Para seguir este tutorial necesitas los siguientes elementos:

  • Python 3.6 o más reciente. Si su sistema operativo no proporciona un intérprete de Python 3.6+, puede ir a python.org para descargar un instalador.
  • Una cuenta gratuita de Twilio SendGrid. Si es nuevo en Twilio SendGrid, regístrese para obtener una cuenta de prueba . Con una cuenta de prueba, puede enviar 40 000 correos electrónicos durante 30 días, luego 100 correos electrónicos por día para siempre.

Configuración con SendGrid

Antes de poder enviar correo electrónico a través de SendGrid, debe crear una clave de API que usará para autenticar el acceso a los servicios de SendGrid. Inicie sesión en su cuenta SendGrid, luego haga clic en la barra lateral izquierda, seleccione "Configuración" y luego Claves API . Haga clic en "Crear clave de API".

Asigne a su clave API un nombre descriptivo (¡manténgalo simple y directo para que recuerde a qué se refiere!). Para este tutorial, elegimos el nombre Flask-Mail . Seleccionamos "Acceso completo" para los permisos, lo que le da a la clave la capacidad de realizar todas las funciones de envío de correo electrónico necesarias (acceso a los puntos finales GET, PATCH, PUT, DELETE y POST). Si prefiere crear una clave que tenga permisos muy específicos, seleccione "Acceso restringido" y configure su acceso según sea necesario.

Cuando haga clic en el botón "Crear y ver", se le presentará su clave. Esta clave nunca se volverá a mostrar, por lo que debe hacer clic en ella para copiarla en el portapapeles. Luego péguelo en un documento seguro para que pueda usarlo más tarde. Si pierde su clave, deberá generar una nueva. Una vez que haya guardado su clave, puede hacer clic en el botón "Listo".

Construyendo un entorno de Python

Ahora que tenemos la configuración completa, podemos sumergirnos en cómo enviar correos electrónicos desde las aplicaciones de Python Flask. Comenzaremos creando un nuevo directorio en su computadora llamado *twilio-sendgrid-tests* (o algo similar), y luego creando un nuevo entorno virtual de Python dentro de él.

Para usuarios de Mac y Unix, los comandos son:

Para usuarios de Windows, los comandos son:

A continuación, instale Flask, Flask-Mail y python-dotenv en su entorno virtual:

Configuración de una aplicación Flask

Construyamos una aplicación Flask y Flask-Mail inicial en el archivo app.py :

Aquí puede ver cómo configurar correctamente Flask-Mail para usar el servicio SMTP de SendGrid. Los ajustes importantes son:

  • El servidor de correo debe ser `smtp.sendgrid.net`.
  • El puerto de correo debe ser 587. (¿Sabe qué puertos usar y cuándo? Consulte esta publicación de blog ) .
  • TLS debe estar habilitado. (¿Cuál es la diferencia entre SSL y TLS ?)
  • Se requiere autenticacion. Para el nombre de usuario, debe usar `apikey` (esto es lo mismo para todas las cuentas de SendGrid). La contraseña es la clave API de SendGrid que creó en la sección anterior.

Para esta aplicación Flask, agregamos la configuración anterior en las claves de configuración adecuadas para la extensión Flask-Mail. Por razones de seguridad, importamos la clave API de una variable de entorno denominada `SENDGRID_API_KEY`. También establecemos una dirección de correo electrónico de remitente predeterminada desde una variable de entorno. Esta es la dirección de correo electrónico que aparecerá en el campo "de" de todos los correos electrónicos de forma predeterminada.

Cree un archivo .env con las dos variables requeridas:

Flask importará automáticamente las variables definidas en el archivo .env (siempre que tenga instalado el paquete python-dotenv), por lo que esto es suficiente para incluir estas dos variables en la configuración de la aplicación Flask.

Envío de un correo electrónico de prueba

Veamos cómo puedes enviarte un correo electrónico de prueba desde el shell de Python:

Tenga en cuenta que comenzamos el shell de Python con el comando `flask shell`. Esto asegurará que se importe la aplicación Flask que construimos en app.py.

Una vez en el shell, importa la instancia de `mail` que creamos en app.py y la clase `Message` de Flask-Mail:

A continuación, cree una instancia de `Message`:

El último paso es enviar este correo electrónico:

¡Y eso es! Si todo sale según lo planeado, el correo electrónico debería llegar a su bandeja de entrada en solo unos segundos.

Si desea ver un ejemplo de ruta Flask que integre esta funcionalidad, aquí hay uno simple que puede agregar en la parte inferior de app.py :

Para completar la aplicación de ejemplo, debe agregar el archivo de plantilla index.html . Primero cree un directorio para sus plantillas:

Y luego escriba el siguiente contenido en el archivo templates/index.html :

Ejecute la aplicación de prueba con:

Luego navegue a http://localhost:5000 en su navegador web para acceder a la aplicación.

Ahora puede ingresar la dirección de correo electrónico de un destinatario y, cuando haga clic en el botón, se enviará un correo electrónico de prueba a esa dirección.

Solución de problemas de entrega

Al usar la aplicación Flask anterior, debería tener éxito en el envío de correos electrónicos. Sin embargo, existe la posibilidad de que sus correos electrónicos no se entreguen. Dado que SendGrid envía correos electrónicos de forma asíncrona, la mayoría de los errores de entrega ocurren después de que el remitente completa su parte de la transacción, por lo que su aplicación no tendrá ninguna indicación de que ha habido un error. Si esto sucede, es probable que el servidor de correo electrónico del destinatario haya rechazado el correo electrónico.

Afortunadamente, si experimenta esto al enviar un correo electrónico como lo describimos, puede usar el panel Twilio SendGrid para ayudarlo a depurar lo que sucedió. Desde el panel de control de SendGrid , haga clic en Actividad y luego en el botón "Mostrar toda la actividad" en el medio de la página. Esto le mostrará una lista de todos los correos electrónicos que intentó enviar, indicando si se entregaron correctamente o no.

Puede ver en la imagen de arriba que un correo electrónico que se envió a una dirección de ejemplo.com no se entregó. Para cualquier correo electrónico que no se entregó, puede hacer clic en el correo electrónico para ver información detallada, incluidas las respuestas de error enviadas por el servidor de correo electrónico del destinatario.

Una vez que determine por qué sus correos electrónicos no se envían, hay varias formas de resolver esos problemas de entrega. Si ve una serie de errores ortográficos en los correos electrónicos (por ejemplo, @yaho.com o @gmal.com), podría valer la pena explorar una herramienta de validación de correo electrónico para detectar cualquier error ortográfico común en su lista de contactos de correo electrónico.

Hay muchos otros problemas que pueden provocar una entrega fallida, incluida una mala reputación de envío o una dirección IP bloqueada. Aprenda todo sobre la capacidad de entrega de correo electrónico en nuestra Guía de capacidad de entrega de correo electrónico 2020 .

Conclusión

Como puede ver en el tutorial, Twilio SendGrid se integra fácilmente en el flujo de trabajo de envío de correo electrónico de Start Flask, lo que hace que el envío de correo electrónico sea una tarea sencilla.

Si ahora se pregunta cómo recibe correos electrónicos de Flask Framework en Python, no se preocupe, ¡lo tenemos cubierto! Consulte este artículo: Cómo recibir correos electrónicos con Flask Framework para Python .

Y, para obtener más recursos sobre cómo integrarse con Twilio SendGrid o enviar a través de nuestras API, consulte nuestro Centro de conocimiento .