En esta guía, se describe cómo usar la API de Mail para recibir correos electrónicos.
Los mensajes de correo electrónico que se envían a tu app se implementan como solicitudes HTTP que contienen datos MIME. Para procesar los mensajes de correo electrónico entrantes, asocia las direcciones de correo electrónico con los controladores de secuencias de comandos en la configuración de tu aplicación y, luego, incluye los controladores en el código de la aplicación.
El correo electrónico entrante genera solicitudes HTTP, que se pasan a las secuencias de comandos adecuadas. Las secuencias de comando que controlan el correo electrónico entrante deben residir en su servicio predeterminado.
Para obtener más información sobre el servicio de correo, consulta la Descripción general de la API de correo.
Antes de comenzar
Debes registrar los correos electrónicos de tus remitentes como remitentes autorizados. Para obtener más información, consulta quién puede enviar correos electrónicos.
Configurar tu aplicación para recibir correo electrónico
Cuando creas una aplicación nueva, el correo electrónico entrante está inhabilitado de forma predeterminada. Para habilitar el correo electrónico entrante, debes modificar el archivo app.yaml
en tu servicio predeterminado.
Agrega una sección
inbound_services
que habilite el servicio de correo electrónico entrante. Por ejemplo:Si no habilitas el correo electrónico entrante cuando incluyas esta sección en tu archivo de configuración, el correo electrónico entrante se inhabilitará y se omitirán los mensajes de correo electrónico enviados a la aplicación.
Agrega asignaciones que asocien direcciones de correo electrónico asignadas mediante URL con controladores de secuencia de comandos.
En el servicio predeterminado, la dirección de correo electrónico para recibir correos electrónicos tiene el siguiente formato:
[STRING]@[Google Cloud project ID].appspotmail.com
Para los servicios no predeterminados, la dirección de correo electrónico tiene el siguiente formato:
[STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com
Los mensajes de correo electrónico se envían a tu aplicación como solicitudes HTTP POST con la siguiente URL, en el que [ADDRESS] es una dirección de correo electrónico completa, incluido el nombre del dominio:
/_ah/mail/[ADDRESS]
Para controlar el correo electrónico entrante en tu app, asigna las URL de correo electrónico a los controladores en el archivo
app.yaml
:En el ejemplo anterior,
/_ah/mail/.+
coincide con todos los correos electrónicos dirigidos a la aplicación. Si lo prefieres, puedes configurar varios controladores para diferentes direcciones de correo electrónico, como en el ejemplo siguiente:Las URL de los mensajes de correo electrónico entrantes se comparan con esta lista del primero al último, por lo que, si la URL de un mensaje de correo electrónico coincide con más de un patrón, el primer controlador coincidente será el que se ejecute. Esto te permite incluir un controlador "genérico" como la última asignación. Los controladores se ejecutan en el módulo predeterminado (o en la versión de la aplicación).
Controlar el correo electrónico entrante
Cuando se usan frameworks web de Python, el constructor InboundEmailMessage
toma los bytes del cuerpo de la solicitud HTTP. Existen varias formas de crear el objeto InboundEmailMessage
en Python. En Flask, request.get_data()
otorga los bytes de solicitud.
El objeto InboundEmailMessage
contiene el
mensaje de correo electrónico. Su método bodies()
muestra los cuerpos dentro del mensaje. Si llamas a bodies()
sin argumentos, muestra un iterador que genera primero los cuerpos HTML y, luego, los de texto sin formato. Si solo quieres HTML o texto sin formato,
puedes pasar un argumento a bodies()
:
El objeto InboundEmailMessage
incluye atributos para acceder a otros campos de mensajes:
subject
contiene el asunto del mensaje.sender
es la dirección del remitente, p.Ej.,"Nobody <nobody@example.com>"
.to
es una lista separada por comas de los destinatarios principales del mensaje, por ejemplo,"Joe <joe@example.com>, Bill <bill@example.com>"
.cc
contiene una lista separada por comas de los destinatarios de cc, por ejemplo,"Joe <joe@example.com>, Bill <bill@example.com>"
.date
muestra la fecha del mensaje.attachments
es una lista de objetosAttachment
, posiblemente vacía.original
es el mensaje completo, incluidos los datos no expuestos por los demás campos, como los encabezados de correo electrónico, como unemail.message.Message
de Python.
Simular mensajes entrantes con el servidor de desarrollo local
Cuando configures tu aplicación para controlar el correo electrónico entrante, puedes usar la consola del servidor de desarrollo para simular los mensajes de correo electrónico entrantes:
- Para acceder al servidor de desarrollo como administrador, ve a http://localhost:8080/console y selecciona Acceder como administrador.
- En el servidor de desarrollo, haz clic en Correo entrante en el navegador.
Rellena el formulario que aparece y haz clic en Enviar correo electrónico.
Para ejecutar el servidor de desarrollo, consulta el servidor de desarrollo local.
Obtén más información sobre las consideraciones de migración para la API de Mail en la guía Controladores de correo electrónico.