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.
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).
Controla el correo electrónico entrante
El SDK de Python define InboundMailHandler
, una clase de aplicación web para controlar el correo electrónico entrante. InboundMailHandler
está en el paquete google.appengine.ext.webapp.mail_handlers
.
Para usar InboundMailHandler
, ingresa el siguiente comando:
- Crea una subclase para
InboundMailHandler
y anula el métodoreceive()
. - Llama al método
receive()
con un argumento de claseInboundEmailMessage
, definido por el SDK de Python.
Por ejemplo, puedes crear una instancia de InboundEmailMessage
como esta:
InboundMailHandler
contiene un método de clase mapping()
práctico que muestra una sincronización combinada de todas las direcciones de correo electrónico entrantes con el controlador de correo y, por supuesto, puedes llamarlo en cualquier subclase InboundMailHandler
de tu código:
El objeto InboundEmailMessage
(mail_message
en este ejemplo) 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 obtener más información, incluso cómo conseguir que el servidor de desarrollo se ejecute, consulta el Servidor de desarrollo de Python.